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<HazyRegionModel>(); } }
|
DailyQuestModel dailyQuestModel { get { return ModelCenter.Instance.GetModel<DailyQuestModel>(); } }
|
|
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<HazyRegionBuyTimesWin>();
|
}
|
|
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<HazyRegionBuyTimesWin>();
|
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();
|
}
|
}
|
}
|
}
|