using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
using UnityEngine;
|
using UnityEngine.UI;
|
|
namespace vnxbqy.UI
|
{
|
public class HazyRegionIncidentPanel : MonoBehaviour
|
{
|
[SerializeField] HazyRegionCyclicScroll m_CyclicScroll;
|
[SerializeField] Transform m_ContainerPoint;
|
[SerializeField] Slider m_Slider;
|
[SerializeField] Text m_Point;
|
[SerializeField] Button m_TeamAssist;
|
[SerializeField] Text m_TeamAssistText;
|
[SerializeField] Button m_Over;
|
[SerializeField] Button m_Goto;
|
[SerializeField] Text m_GotoLabel;
|
|
List<int> incidents = new List<int>();
|
|
HazyRegionModel model { get { return ModelCenter.Instance.GetModel<HazyRegionModel>(); } }
|
DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }
|
PackModel packModel { get { return ModelCenter.Instance.GetModel<PackModel>(); } }
|
FindPreciousModel findPreciousModel { get { return ModelCenter.Instance.GetModel<FindPreciousModel>(); } }
|
DailyQuestModel dailyQuestModel { get { return ModelCenter.Instance.GetModel<DailyQuestModel>(); } }
|
DungeonAssistModel assistModel { get { return ModelCenter.Instance.GetModel<DungeonAssistModel>(); } }
|
TeamModel teamModel { get { return ModelCenter.Instance.GetModel<TeamModel>(); } }
|
|
DateTime requestTime = DateTime.Now;
|
int requestCount = 0;
|
float timer = 0f;
|
Dictionary<int, List<byte>> requestLines = new Dictionary<int, List<byte>>();
|
|
int CoolTimeSecond = 0;
|
DateTime startCoolTime = DateTime.Now; //冷却时间
|
protected void LateUpdate()
|
{
|
if (CoolTimeSecond > 0)
|
{
|
var seconds = (int)(CoolTimeSecond - (float)(DateTime.Now - startCoolTime).TotalSeconds);
|
if (seconds <= 0)
|
{
|
CoolTimeSecond = 0;
|
m_TeamAssistText.text = Language.Get("QuestAssist");
|
m_TeamAssist.SetEnable(m_TeamAssistText, true);
|
m_TeamAssist.SetColorful(m_TeamAssistText, true);
|
}
|
else
|
{
|
m_TeamAssistText.text = Language.Get("JadeDynastyCD", seconds);
|
m_TeamAssist.SetEnable(m_TeamAssistText, false);
|
m_TeamAssist.SetColorful(m_TeamAssistText, false);
|
}
|
}
|
}
|
|
private void Awake()
|
{
|
m_TeamAssist.SetListener(TeamAssist);
|
m_Goto.SetListener(Goto);
|
m_Over.SetListener(EventHandOver);
|
}
|
|
int QuestAssistID = -1; //队伍创建成功后发送请求
|
int QuestGoto = -1; //队伍创建成功后打开界面
|
private void TeamAssist()
|
{
|
if (PlayerDatas.Instance.baseData.FamilyId == 0)
|
{
|
SysNotifyMgr.Instance.ShowTip("DailyQuestwinUnionLimit");
|
return;
|
}
|
var config = HazyRegionConfig.Get(model.selectIncident);
|
if (config == null)
|
{
|
return;
|
}
|
if (teamModel.myTeam.inTeam)
|
{
|
if (!teamModel.myTeam.iamCaptainer)
|
{
|
//退队重组
|
ConfirmCancel.ShowPopConfirm(Language.Get("Mail101"), Language.Get("Z2009"), (bool isOk) =>
|
{
|
if (isOk)
|
{
|
teamModel.RequestExitTeam();
|
QuestAssistID = model.selectIncident;
|
teamModel.missionBuf = new TeamMission(config.dungeonId, config.lineId);
|
teamModel.RequestCreateTeam(teamModel.missionBuf.mapId, teamModel.missionBuf.mapEx);
|
}
|
});
|
}
|
|
if (teamModel.missionBuf.mapId != config.dungeonId)
|
{
|
teamModel.missionBuf = new TeamMission(config.dungeonId, config.lineId);
|
var dungeonId = dungeonModel.GetDungeonId(config.dungeonId, config.lineId);
|
|
var limitLevelMin = 0;
|
var limitLevelMax = 0;
|
if (dungeonId != 0)
|
{
|
var dungeonConfig = DungeonConfig.Get(dungeonId);
|
limitLevelMin = dungeonConfig.LVLimitMin;
|
limitLevelMax = dungeonConfig.LVLimitMax;
|
}
|
teamModel.RequestAmendTeamInfo(teamModel.missionBuf, limitLevelMin, limitLevelMax);
|
|
}
|
startCoolTime = DateTime.Now;
|
CoolTimeSecond = 10;
|
assistModel.SendTeamAssist(config.dungeonId, config.lineId);
|
}
|
else
|
{
|
//创建队成功才可发起请求
|
ConfirmCancel.ShowPopConfirm(Language.Get("Mail101"), Language.Get("Z2009"), (bool isOk) =>
|
{
|
if (isOk)
|
{
|
QuestAssistID = model.selectIncident;
|
teamModel.missionBuf = new TeamMission(config.dungeonId, config.lineId);
|
teamModel.RequestCreateTeam(teamModel.missionBuf.mapId, teamModel.missionBuf.mapEx);
|
}
|
});
|
|
}
|
}
|
|
private void TeamGoto()
|
{
|
var config = HazyRegionConfig.Get(model.selectIncident);
|
if (config == null)
|
{
|
return;
|
}
|
if (PlayerDatas.Instance.hero.ActorInfo.teamID != 0)
|
{
|
if (!teamModel.myTeam.iamCaptainer)
|
{
|
SysNotifyMgr.Instance.ShowTip("DungeonGroupOnlyTeamLeader");
|
//退队重组
|
ConfirmCancel.ShowPopConfirm(Language.Get("Mail101"), Language.Get("Z2012"), (bool isOk) =>
|
{
|
if (isOk)
|
{
|
teamModel.RequestExitTeam();
|
QuestGoto = model.selectIncident;
|
teamModel.missionBuf = new TeamMission(config.dungeonId, config.lineId);
|
teamModel.RequestCreateTeam(teamModel.missionBuf.mapId, teamModel.missionBuf.mapEx);
|
}
|
});
|
return;
|
}
|
|
WindowCenter.Instance.Open<TeamFrameWin>(false, 1);
|
}
|
else
|
{
|
QuestGoto = model.selectIncident;
|
teamModel.missionBuf = new TeamMission(config.dungeonId, config.lineId);
|
teamModel.RequestCreateTeam(teamModel.missionBuf.mapId, teamModel.missionBuf.mapEx);
|
|
}
|
}
|
|
|
private void OnCreateTeam()
|
{
|
if (QuestAssistID != -1)
|
{
|
var config = HazyRegionConfig.Get(QuestAssistID);
|
if (config == null)
|
{
|
return;
|
}
|
startCoolTime = DateTime.Now;
|
CoolTimeSecond = 10;
|
assistModel.SendTeamAssist(config.dungeonId, config.lineId);
|
|
QuestAssistID = -1;
|
}
|
|
if (QuestGoto != -1)
|
{
|
WindowCenter.Instance.Open<TeamFrameWin>(false, 1);
|
QuestGoto = -1;
|
}
|
|
}
|
|
private void EventHandOver()
|
{
|
//提前结束事件
|
ConfirmCancel.ShowPopConfirm(Language.Get("Mail101"), Language.Get("HazyRegionBackRemind_2"), (bool isOk) =>
|
{
|
if (isOk)
|
{
|
model.SendBackHazyRegion();
|
}
|
});
|
}
|
|
public void Display()
|
{
|
QuestAssistID = -1;
|
QuestGoto = -1;
|
DisplayPoint();
|
DisplayIncidents();
|
DisplayBackButton();
|
DisplayGotoState();
|
|
requestCount = 0;
|
model.incidentDirty = false;
|
|
m_ContainerPoint.SetActive(false);
|
|
DailyQuestActionTimer.Instance.RefreshDailyQuestState -= RefreshDailyQuestState;
|
DailyQuestActionTimer.Instance.RefreshDailyQuestState += RefreshDailyQuestState;
|
|
m_CyclicScroll.animationComplete -= AnimationComplete;
|
m_CyclicScroll.animationComplete += AnimationComplete;
|
|
model.selectIncidentRefresh -= DisplayBackButton;
|
model.selectIncidentRefresh += DisplayBackButton;
|
teamModel.createTeamEvent -= OnCreateTeam;
|
teamModel.createTeamEvent += OnCreateTeam;
|
}
|
|
void DisplayIncidents()
|
{
|
incidents.Clear();
|
incidents.AddRange(model.GetAllIncidents());
|
incidents.Sort(Compare);
|
|
if (incidents.Count > 0)
|
{
|
var _ids = new List<int>(incidents);
|
_ids.Sort((x, y) =>
|
{
|
HazyRegionModel.Incident lhs_incident;
|
HazyRegionModel.Incident rhs_incident;
|
if (model.TryGetIncident(x, out lhs_incident)
|
&& model.TryGetIncident(y, out rhs_incident))
|
{
|
var lhs_index = model.incidentSelectSort.IndexOf(lhs_incident.state);
|
var rhs_index = model.incidentSelectSort.IndexOf(rhs_incident.state);
|
if (lhs_index != rhs_index)
|
{
|
return lhs_index.CompareTo(rhs_index);
|
}
|
|
lhs_index = incidents.IndexOf(x);
|
rhs_index = incidents.IndexOf(y);
|
if (lhs_index != rhs_index)
|
{
|
return lhs_index.CompareTo(rhs_index);
|
}
|
}
|
return 0;
|
});
|
|
model.selectIncident = _ids[0];
|
}
|
|
m_CyclicScroll.Init(incidents);
|
|
if (!model.requireIncidentAnimation && model.selectIncident != incidents[0])
|
{
|
m_CyclicScroll.MoveToCenter(incidents.IndexOf(model.selectIncident));
|
}
|
|
if (model.requireIncidentAnimation)
|
{
|
m_CyclicScroll.DisplayAnimation();
|
model.requireIncidentAnimation = false;
|
}
|
}
|
|
void DisplayPoint()
|
{
|
var point = Mathf.Min(model.point, model.limitPoint);
|
m_Point.text = StringUtility.Contact(point, "/", model.limitPoint);
|
m_Slider.value = Mathf.Clamp01((float)point / model.limitPoint);
|
}
|
|
void DisplayBackButton()
|
{
|
m_TeamAssist.SetActive(false);
|
m_Over.SetActive(false);
|
m_GotoLabel.text = Language.Get("Z1074");
|
var config = HazyRegionConfig.Get(model.selectIncident);
|
// 宝藏类定义为需要组队协助
|
if (config != null && config.incidentType == (int)HazyRegionIncidentType.Precious)
|
{
|
m_TeamAssist.SetActive(true);
|
m_Over.SetActive(true);
|
m_GotoLabel.text = Language.Get("Z2011");
|
if (CoolTimeSecond == 0)
|
{
|
m_TeamAssist.SetEnable(m_TeamAssistText, true);
|
m_TeamAssist.SetColorful(m_TeamAssistText, true);
|
m_TeamAssistText.text = Language.Get("QuestAssist");
|
}
|
}
|
}
|
|
int Compare(int lhs, int rhs)
|
{
|
var lhs_config = HazyRegionConfig.Get(lhs);
|
var rhs_config = HazyRegionConfig.Get(rhs);
|
//var lhs_index = model.incidentTypesSort.IndexOf((HazyRegionIncidentType)lhs_config.incidentType);
|
//var rhs_index = model.incidentTypesSort.IndexOf((HazyRegionIncidentType)rhs_config.incidentType);
|
//if (lhs_index != rhs_index)
|
//{
|
// return lhs_index.CompareTo(rhs_index);
|
//}
|
//if (lhs_config.incidentType == rhs_config.incidentType)
|
//{
|
// if ((HazyRegionIncidentType)lhs_config.incidentType == HazyRegionIncidentType.DemonKing)
|
// {
|
// if (lhs_config.lineId != rhs_config.lineId)
|
// {
|
// return -lhs_config.lineId.CompareTo(rhs_config.lineId);
|
// }
|
// }
|
//}
|
if (lhs_config.star != rhs_config.star)
|
{
|
return -lhs_config.star.CompareTo(rhs_config.star);
|
}
|
return lhs_config.id.CompareTo(lhs_config.id);
|
}
|
|
private void OnBack()
|
{
|
if (model.IsIncidentDungeon())
|
{
|
|
return;
|
}
|
|
var state = 0;
|
|
bool allComplete = true;
|
int minpoint = int.MaxValue;
|
|
foreach (var id in incidents)
|
{
|
HazyRegionModel.Incident incident;
|
if (model.TryGetIncident(id, out incident))
|
{
|
if (incident.state == HazyRegionModel.IncidentState.Processing)
|
{
|
state = 2;
|
allComplete = false;
|
break;
|
}
|
if(incident.state != HazyRegionModel.IncidentState.Complete)
|
{
|
allComplete = false;
|
}
|
var config = HazyRegionConfig.Get(id);
|
if (minpoint > config.point)
|
{
|
minpoint = config.point;
|
}
|
}
|
}
|
|
if (state == 0 && !allComplete && model.point >= minpoint)
|
{
|
state = 1;
|
}
|
|
switch (state)
|
{
|
case 1:
|
ConfirmCancel.ShowPopConfirm(Language.Get("Mail101"), Language.Get("HazyRegionBackRemind_1"), (bool isOk) =>
|
{
|
if (isOk)
|
{
|
model.SendBackHazyRegion();
|
}
|
});
|
break;
|
case 2:
|
ConfirmCancel.ShowPopConfirm(Language.Get("Mail101"), Language.Get("HazyRegionBackRemind_2"), (bool isOk) =>
|
{
|
if (isOk)
|
{
|
model.SendBackHazyRegion();
|
}
|
});
|
break;
|
default:
|
model.SendBackHazyRegion();
|
break;
|
}
|
}
|
|
private void DisplayGotoState()
|
{
|
var questState = dailyQuestModel.GetQuestState((int)DailyQuestType.HazyRegion);
|
m_Goto.SetColorful(m_GotoLabel, questState != DailyQuestModel.DailyQuestState.OutTime);
|
}
|
|
|
//private void GotoAuto()
|
//{
|
// model.auto = true;
|
// GA_Hero.startAutoHazyRegion = true;
|
// //Goto();
|
//}
|
|
private void Goto()
|
{
|
var error = 0;
|
var config = HazyRegionConfig.Get(model.selectIncident);
|
if (!model.TryGotoIncident(model.selectIncident, true, out error))
|
{
|
model.DisplayErrorRemind(error);
|
}
|
else
|
{
|
if (config.incidentType == (int)HazyRegionIncidentType.FairyGrass)
|
{
|
HazyRegionModel.Incident incident;
|
if (model.TryGetIncident(model.selectIncident, out incident))
|
{
|
if (incident.state == HazyRegionModel.IncidentState.UnStart)
|
{
|
var item = dungeonModel.GetTicketCost(config.dungeonId, config.lineId);
|
if (item.id != 0)
|
{
|
var itemConfig = ItemConfig.Get(item.id);
|
ConfirmCancel.ShowItemConfirm(Language.Get("HazyRegionFairyGrassTicket",
|
item.count, itemConfig.ItemName), item.id,
|
item.count, () =>
|
{
|
var count = packModel.GetItemCountByID(PackType.Item, item.id);
|
if (count >= item.count)
|
{
|
model.SendGotoIncident(model.selectIncident);
|
}
|
else
|
{
|
ItemTipUtility.Show(item.id);
|
}
|
});
|
return;
|
}
|
}
|
}
|
}
|
|
// 宝藏类定义为需要组队协助
|
if (config != null && config.incidentType == (int)HazyRegionIncidentType.Precious)
|
{
|
TeamGoto();
|
}
|
else
|
{
|
model.SendGotoIncident(model.selectIncident);
|
}
|
}
|
}
|
|
|
|
|
private void RefreshDailyQuestState()
|
{
|
DisplayGotoState();
|
}
|
|
private void AnimationComplete()
|
{
|
//if (!NewBieCenter.Instance.IsGuideCompleted(58))
|
//{
|
// NewBieCenter.Instance.StartNewBieGuide(58);
|
//}
|
}
|
|
public void Dispose()
|
{
|
m_CyclicScroll.Dispose();
|
DailyQuestActionTimer.Instance.RefreshDailyQuestState -= RefreshDailyQuestState;
|
m_CyclicScroll.animationComplete -= AnimationComplete;
|
}
|
|
#if UNITY_EDITOR
|
void OnGUI()
|
{
|
if (GUILayout.Button("Back"))
|
{
|
OnBack();
|
}
|
}
|
#endif
|
}
|
}
|
|