using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace vnxbqy.UI { public class HazyRegionEntrancePanel : MonoBehaviour { [SerializeField] Transform m_ContainerTimes; [SerializeField] Text m_Times; [SerializeField] Button m_GetPath; [SerializeField] Button m_Goto; [SerializeField] Text m_GotoLabel; [SerializeField] Button m_GotoAuto; HazyRegionModel model { get { return ModelCenter.Instance.GetModel(); } } DailyQuestModel dailyQuestModel { get { return ModelCenter.Instance.GetModel(); } } DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel(); } } private void Awake() { m_GetPath.AddListener(GetPath); m_Goto.AddListener(Goto); m_GotoAuto.AddListener(GotoEx); } public void Display() { dailyQuestModel.usableActivePointUpdateEvent += UsableActivePointUpdateEvent; model.onHazyRegionIncidentRefresh += OnHazyRegionIncidentRefresh; dailyQuestModel.dailyQuestProgressUpdateEvent += DailyQuestProgressUpdateEvent; DisplayActivePoint(); DisplayButtonState(); TryStartNotEnoughPointGuide(); if (PlayerDatas.Instance.baseData.LV >= model.autoOpenLimitLV) { Vector3 v = m_Goto.transform.localPosition; v.x = -105; m_Goto.transform.localPosition = v; m_GotoAuto.transform.SetActive(true); } } void DisplayActivePoint() { m_ContainerTimes.SetActive(true); var config = DailyQuestConfig.Get((int)DailyQuestType.HazyRegion); var dailyQuestOpenTime = DailyQuestOpenTimeConfig.Get(config.RelatedID); var totalTimes = dailyQuestModel.GetDailyQuestTotalTimes((int)DailyQuestType.HazyRegion); var completedTimes = dailyQuestModel.GetDailyQuestCompletedTimes((int)DailyQuestType.HazyRegion); m_Times.text = StringUtility.Contact(totalTimes - completedTimes, "/", dailyQuestOpenTime.DayTimes); m_Times.color = UIHelper.GetUIColor(completedTimes >= totalTimes ? TextColType.Red : TextColType.Green); } void DisplayButtonState() { m_Goto.SetColorful(m_GotoLabel, true); m_GotoAuto.SetColorful(m_GotoLabel, true); } void TryStartNotEnoughPointGuide() { if (dailyQuestModel.usableActivePoint < model.openActviePoint && !NewBieCenter.Instance.IsGuideCompleted(136) && !NewBieCenter.Instance.inGuiding) { FunctionalGuideCenter.Instance.StartGuide(136); } } private void GotoEx() { model.auto = true; GA_Hero.startAutoHazyRegion = true; Goto(); } private void Goto() { var error = 0; if (TryOpenHazyReion(out error)) { model.SendOpenHazyRegion(); } else { HandleErrorMessage(error); } } private void GetPath() { WindowCenter.Instance.Open(false, (int)DailyQuestType.HazyRegion); } bool TryOpenHazyReion(out int error) { error = 0; var totalTimes = dailyQuestModel.GetDailyQuestTotalTimes((int)DailyQuestType.HazyRegion); var completedTimes = dailyQuestModel.GetDailyQuestCompletedTimes((int)DailyQuestType.HazyRegion); if (totalTimes <= completedTimes) { error = 2; 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(false, (int)DailyQuestType.HazyRegion); break; case 3: SysNotifyMgr.Instance.ShowTip("OpenHazyRegionError_3"); break; case 4: SysNotifyMgr.Instance.ShowTip("OpenHazyRegionError_4"); break; } } public void Dispose() { dailyQuestModel.usableActivePointUpdateEvent -= UsableActivePointUpdateEvent; model.onHazyRegionIncidentRefresh -= OnHazyRegionIncidentRefresh; dailyQuestModel.dailyQuestProgressUpdateEvent -= DailyQuestProgressUpdateEvent; } private void DailyQuestProgressUpdateEvent(int id) { var config = DailyQuestConfig.Get((int)DailyQuestType.HazyRegion); if (config != null && id == config.RelatedID) { DisplayActivePoint(); } } private void OnHazyRegionIncidentRefresh() { DisplayActivePoint(); DisplayButtonState(); } private void UsableActivePointUpdateEvent() { DisplayActivePoint(); } } }