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 incidents = new List(); HazyRegionModel model { get { return ModelCenter.Instance.GetModel(); } } DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel(); } } PackModel packModel { get { return ModelCenter.Instance.GetModel(); } } FindPreciousModel findPreciousModel { get { return ModelCenter.Instance.GetModel(); } } DailyQuestModel dailyQuestModel { get { return ModelCenter.Instance.GetModel(); } } DungeonAssistModel assistModel { get { return ModelCenter.Instance.GetModel(); } } TeamModel teamModel { get { return ModelCenter.Instance.GetModel(); } } DateTime requestTime = DateTime.Now; int requestCount = 0; float timer = 0f; Dictionary> requestLines = new Dictionary>(); 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(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(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(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 } }