using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class HazyRegionEntrancePanel : MonoBehaviour { [SerializeField] Text m_OpenTime; [SerializeField] Transform m_ContainerTimes; [SerializeField] Text m_Times; [SerializeField] Button m_BuyTimes; [SerializeField] Button m_Goto; [SerializeField] Text m_GotoLabel; HazyRegionModel model { get { return ModelCenter.Instance.GetModel(); } } DailyQuestModel dailyQuestModel { get { return ModelCenter.Instance.GetModel(); } } private void Awake() { m_BuyTimes.AddListener(BuyTimes); m_Goto.AddListener(Goto); } public void Display() { dailyQuestModel.dailyQuestProgressUpdateEvent += DailyQuestProgressUpdateEvent; model.onHazyRegionIncidentRefresh += OnHazyRegionIncidentRefresh; DisplayOpenTime(); DisplayTimes(); DisplayButtonState(); } void DisplayTimes() { m_ContainerTimes.gameObject.SetActive(!model.InFakeHazyRegion); if (!model.InFakeHazyRegion) { var config = DailyQuestConfig.Get((int)DailyQuestType.HazyRegion); var dailyQuestOpenTime = DailyQuestOpenTimeConfig.Get(config.RelatedID); var limitTimes = dailyQuestOpenTime.DayTimes; var totalTimes = dailyQuestModel.GetDailyQuestTotalTimes((int)DailyQuestType.HazyRegion); var completedTimes = dailyQuestModel.GetDailyQuestCompletedTimes((int)DailyQuestType.HazyRegion); var times = Mathf.Clamp(totalTimes - completedTimes, 0, limitTimes); m_Times.text = StringUtility.Contact(times, "/", limitTimes); } } void DisplayOpenTime() { m_OpenTime.gameObject.SetActive(!model.InFakeHazyRegion); if (!model.InFakeHazyRegion) { DailyQuestOpenTime dailyQuestOpenTime; if (dailyQuestModel.TryGetOpenTime((int)DailyQuestType.HazyRegion, out dailyQuestOpenTime)) { HourMinute hourMinute; if (dailyQuestOpenTime.TryGetNextOpenTime(out hourMinute)) { var timeLabel = string.Format("{0}:{1}——{2}:{3}", hourMinute.hourBegin.ToString("D2"), hourMinute.minuteBegin.ToString("D2"), hourMinute.hourEnd.ToString("D2"), hourMinute.minuteEnd.ToString("D2")); timeLabel = UIHelper.AppendColor(TextColType.Green, timeLabel); m_OpenTime.text = Language.Get("HazyRegionEntranceTime", timeLabel); } } } } void DisplayButtonState() { bool allowClick = !model.InFakeHazyRegion || model.satisfyFakeOpen; m_Goto.SetColorful(m_GotoLabel, allowClick); } private void Goto() { var error = 0; if (TryOpenHazyReion(out error)) { model.SendOpenHazyRegion(); } else { HandleErrorMessage(error); } } private void BuyTimes() { var questState = dailyQuestModel.GetQuestState((int)DailyQuestType.HazyRegion); if (questState == DailyQuestModel.DailyQuestState.OutTime) { return; } if (!model.TryAddTimes()) { return; } WindowCenter.Instance.Open(); } bool TryOpenHazyReion(out int error) { error = 0; if (model.InFakeHazyRegion) { if (model.satisfyFakeOpen) { return true; } else { error = 4; return false; } } var questState = dailyQuestModel.GetQuestState((int)DailyQuestType.HazyRegion); if (questState != DailyQuestModel.DailyQuestState.Normal) { switch (questState) { case DailyQuestModel.DailyQuestState.OutTime: error = 1; break; case DailyQuestModel.DailyQuestState.CanBuyTimes: error = 2; break; case DailyQuestModel.DailyQuestState.Completed: error = 3; break; } return false; } return true; } void HandleErrorMessage(int error) { switch (error) { case 1: DailyQuestOpenTime dailyQuestOpenTime; if (dailyQuestModel.TryGetOpenTime((int)DailyQuestType.HazyRegion, out dailyQuestOpenTime)) { HourMinute hourMinute; if (dailyQuestOpenTime.TryGetTodayNearestOpenTime(out hourMinute)) { SysNotifyMgr.Instance.ShowTip("OpenHazyRegionError_1", hourMinute.hourBegin.ToString("D2"), hourMinute.hourEnd.ToString("D2")); } } break; case 2: WindowCenter.Instance.Open(); break; case 3: SysNotifyMgr.Instance.ShowTip("OpenHazyRegionError_3"); break; case 4: SysNotifyMgr.Instance.ShowTip("OpenHazyRegionError_4"); break; } } public void Dispose() { dailyQuestModel.dailyQuestProgressUpdateEvent -= DailyQuestProgressUpdateEvent; model.onHazyRegionIncidentRefresh -= OnHazyRegionIncidentRefresh; } private void OnHazyRegionIncidentRefresh() { DisplayButtonState(); } private void DailyQuestProgressUpdateEvent(int id) { var config = DailyQuestConfig.Get((int)DailyQuestType.HazyRegion); if (config != null && id == config.RelatedID) { DisplayTimes(); } } } }