//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Wednesday, December 06, 2017 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using System.Text; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class FairyLeagueWin : Window { [Header("SignUp")] [SerializeField] Transform m_ContainerSignUp; [SerializeField] Text m_PrepareTitleTxt; [SerializeField] Text m_CutOffTimeTxt; [SerializeField] List m_FairyNameList; [SerializeField] Text m_LeagueStartTime; [SerializeField] Text m_StageTime1; [SerializeField] Text m_StageTime2; [SerializeField] Button m_FairyStoreBtn; [SerializeField] RectTransform m_ContainerSignUpTime; [Header("Battle")] [SerializeField] Transform m_ContainerBattle; [SerializeField] Text m_BattleTitleTxt; [SerializeField] Text m_RewardTxt; [SerializeField] List m_FairyClashList; [SerializeField] RectTransform m_ContainerBattleTime; [SerializeField] Button m_BattleGroundBtn; [SerializeField] Text m_BattleGroundBtnTxt; [SerializeField] Button m_RuleBtn; [SerializeField] RectTransform m_ContainerTime; FairyLeagueModel m_Model; FairyLeagueModel model { get { return m_Model ?? (m_Model = ModelCenter.Instance.GetModel()); } } KingFairyModel m_KingFairyModel; KingFairyModel kingFairyModel { get { return m_KingFairyModel ?? (m_KingFairyModel = ModelCenter.Instance.GetModel()); } } FairyModel m_FairyModel; FairyModel fairyModel { get { return m_FairyModel ?? (m_FairyModel = ModelCenter.Instance.GetModel()); } } StoreModel _storeModel; StoreModel m_storeModel { get { return _storeModel ?? (_storeModel = ModelCenter.Instance.GetModel()); } } private static StringBuilder m_StringBuilder = new StringBuilder(); #region Built-in protected override void BindController() { } protected override void AddListeners() { m_FairyStoreBtn.onClick.AddListener(OnFairyStoreBtn); m_BattleGroundBtn.onClick.AddListener(OnBattleGoundBtn); m_RuleBtn.onClick.AddListener(OnRuneBtn); } protected override void OnPreOpen() { model.CheckFairyLeagueData(); RefreshFairyLeague(); model.OnRefreshFairyLeagueEvent += RefreshFairyLeague; model.onFairyLeagueBattleEvent += UpdateFairyLeagueBattle; //PlayerDatas.Instance.fairyData.OnRefreshFairyList += UpdateFairyLeagueGroup; kingFairyModel.UpdateKingFairyEvent += UpdateKingFairyEvent; model.frontFairyUpdate += FrontFairyUpdate; } protected override void OnAfterOpen() { } protected override void OnPreClose() { model.OnRefreshFairyLeagueEvent -= RefreshFairyLeague; model.onFairyLeagueBattleEvent -= UpdateFairyLeagueBattle; //PlayerDatas.Instance.fairyData.OnRefreshFairyList -= UpdateFairyLeagueGroup; kingFairyModel.UpdateKingFairyEvent -= UpdateKingFairyEvent; model.frontFairyUpdate -= FrontFairyUpdate; } protected override void OnAfterClose() { } protected override void LateUpdate() { base.LateUpdate(); } #endregion private void FrontFairyUpdate() { UpdateFairyLeagueGroup(); } private void UpdateKingFairyEvent() { if (model.fairyLeagueSession == 1 && model.fairyLeagueStage == FairyLeagueStage.Over) { m_RewardTxt.text = Language.Get("CongratulationWangZheMeng", kingFairyModel.kingFairyData.fairyName); } } private void RefreshFairyLeague() { m_ContainerSignUp.gameObject.SetActive(model.fairyLeagueStage == FairyLeagueStage.Prepare); m_ContainerBattle.gameObject.SetActive(model.fairyLeagueStage != FairyLeagueStage.Prepare); m_BattleGroundBtn.SetInteractable(m_BattleGroundBtnTxt, model.fairyLeagueStage == FairyLeagueStage.Fight); m_ContainerTime.transform.SetParent(model.fairyLeagueStage == FairyLeagueStage.Prepare ? m_ContainerSignUpTime : m_ContainerBattleTime); m_ContainerTime.localPosition = Vector3.zero; if (model.fairyLeagueStage == FairyLeagueStage.Prepare) { model.SearchLeagueFrontFairy(); RefreshPrepare(); } else { RefreshFight(); } } private void RefreshPrepare() { var isNextWeek = model.IsNextWeek; var weekTime = isNextWeek ? model.nextWeekTime : model.currentWeekTime; var ring = isNextWeek ? 0 : weekTime.currentRing; FairyLeagueWeekTime.Session session; if (weekTime.TryGetSession(ring, 0, out session)) { var stage = session.stages.Find((x) => { return x.stage == FairyLeagueStage.Grouping; }); m_CutOffTimeTxt.text = Language.Get("FamilyMatchBlockingTime", isNextWeek ? Language.Get("Next") : Language.Get("ThisTime"), Language.Get(StringUtility.Contact("Weekday", weekTime.GetDayOfWeek(ring))), stage.startHour, stage.startMinute.ToString("D2")); } UpdateFairyLeagueGroup(); UpdateStageTime(); } private void RefreshFight() { m_RewardTxt.text = Language.Get("FamilyMatchWangZheController"); switch (model.fairyLeagueStage) { case FairyLeagueStage.Grouping: m_BattleTitleTxt.text = Language.Get("FamilyMatchAboutToStart", Language.Get(StringUtility.Contact("Num_CHS_", model.fairyLeagueSession + 1))); break; case FairyLeagueStage.Fight: m_BattleTitleTxt.text = Language.Get("FamilyMatchDoing", Language.Get(StringUtility.Contact("Num_CHS_", model.fairyLeagueSession + 1))); break; case FairyLeagueStage.Over: UpdateKingFairyEvent(); m_BattleTitleTxt.text = Language.Get("FamilyMatchEnd", Language.Get(StringUtility.Contact("Num_CHS_", model.fairyLeagueSession + 1))); break; } UpdateStageTime(); UpdateFairyLeagueBattle(); } private void UpdateStageTime() { var _session = model.fairyLeagueSession; bool _stage1Over = false; bool _stage2Over = false; var isNextWeek = model.IsNextWeek; var weekTime = isNextWeek ? model.nextWeekTime : model.currentWeekTime; var ring = isNextWeek ? 0 : weekTime.currentRing; var fairyLeagueStage = model.fairyLeagueStage; FairyLeagueWeekTime.Session session1; weekTime.TryGetSession(ring, 0, out session1); FairyLeagueWeekTime.Session session2; weekTime.TryGetSession(ring, 1, out session2); m_LeagueStartTime.text = Language.Get("FamilyMatchWeekTime", model.IsNextWeek ? Language.Get("Next") : Language.Get("ThisTime"), Language.Get(StringUtility.Contact("Weekday", weekTime.GetDayOfWeek(ring)))); if (_session > 0 || fairyLeagueStage == FairyLeagueStage.Over) { _stage1Over = true; m_StageTime1.text = StringUtility.Contact(Language.Get("FamilyMatchWhichTurn", Language.Get("Num_CHS_1")), ": ", Language.Get("FamilyMatchAlreadyEnd")); } if (_session > 0 && fairyLeagueStage == FairyLeagueStage.Over) { _stage2Over = true; m_StageTime2.text = StringUtility.Contact(Language.Get("FamilyMatchWhichTurn", Language.Get("Num_CHS_2")), ": ", Language.Get("FamilyMatchAlreadyEnd")); } if (!_stage1Over) { if (session1 != null) { var groupStage = session1.stages.Find((x) => { return x.stage == FairyLeagueStage.Grouping; }); var fightStage = session1.stages.Find((x) => { return x.stage == FairyLeagueStage.Fight; }); m_StageTime1.text = StringUtility.Contact(Language.Get("FamilyMatchWhichTurn", Language.Get("Num_CHS_1")), ": ", Language.Get(StringUtility.Contact("Weekday", groupStage.dayOfWeek)), " ", fightStage.startHour, ":", fightStage.startMinute.ToString("D2"), "-", fightStage.endHour, ":", fightStage.endMinute.ToString("D2")); } } if (!_stage2Over) { if (session2 != null) { var groupStage = session2.stages.Find((x) => { return x.stage == FairyLeagueStage.Grouping; }); var fightStage = session2.stages.Find((x) => { return x.stage == FairyLeagueStage.Fight; }); m_StageTime2.text = StringUtility.Contact(Language.Get("FamilyMatchWhichTurn", Language.Get("Num_CHS_2")), ": ", Language.Get(StringUtility.Contact("Weekday", groupStage.dayOfWeek)), " ", fightStage.startHour, ":", fightStage.startMinute.ToString("D2"), "-", fightStage.endHour, ":", fightStage.endMinute.ToString("D2")); } } if (_session == 0 && fairyLeagueStage == FairyLeagueStage.Over) { if (session1 != null) { var groupStage = session1.stages.Find((x) => { return x.stage == FairyLeagueStage.Grouping; }); var fightStage = session1.stages.Find((x) => { return x.stage == FairyLeagueStage.Fight; }); m_LeagueStartTime.text = Language.Get("FamilyMatchWeekTime", model.IsNextWeek ? Language.Get("Next") : Language.Get("ThisTime"), Language.Get(StringUtility.Contact("Weekday", groupStage.dayOfWeek))); } } else { if (session2 != null) { var groupStage = session2.stages.Find((x) => { return x.stage == FairyLeagueStage.Grouping; }); var fightStage = session2.stages.Find((x) => { return x.stage == FairyLeagueStage.Fight; }); m_LeagueStartTime.text = Language.Get("FamilyMatchWeekTime", model.IsNextWeek ? Language.Get("Next") : Language.Get("ThisTime"), Language.Get(StringUtility.Contact("Weekday", groupStage.dayOfWeek))); } } } private void UpdateFairyLeagueGroup() { if (model.fairyLeagueStage != FairyLeagueStage.Prepare) { return; } if (HasGradeFairy()) { m_PrepareTitleTxt.text = Language.Get("FamilyMatchQualification"); } else { m_PrepareTitleTxt.text = Language.Get("FamilyMatchQualification2"); } for (int i = 0; i < m_FairyNameList.Count; i++) { List list = model.frontLeagueFairy; for (int j = 0; j < m_FairyNameList[i].fairyNameList.Count; j++) { var _adaptive = m_FairyNameList[i].fairyNameList[j]; if (list == null || i * 4 + j >= list.Count) { _adaptive.Display(Language.Get("FamilyMatchNoOneHere")); _adaptive.SetAdaptive(false); } else { _adaptive.Display(list[i * 4 + j].FamilyName); _adaptive.SetAdaptive(list[i * 4 + j].FamilyID == PlayerDatas.Instance.baseData.Family && PlayerDatas.Instance.baseData.Family > 0); } } } } bool HasGradeFairy() { List list = model.frontLeagueFairy; for (int i = 0; i < list.Count; i++) { if (list[i].WarRank != 0) { return true; } } return false; } private void UpdateFairyLeagueBattle() { var _session = model.fairyLeagueSession; var fairyLeagueStage = model.fairyLeagueStage; for (int i = 0; i < m_FairyClashList.Count; i++) { var fairyClash = m_FairyClashList[i]; List list = model.GetFairyLeague(model.StepSession(fairyClash.grade) ? 0 : model.fairyLeagueSession, fairyClash.grade); fairyClash.SetActive((fairyLeagueStage == FairyLeagueStage.Over && _session == 1) || model.StepSession(fairyClash.grade)); if ((fairyLeagueStage == FairyLeagueStage.Over && _session == 1) || model.StepSession(fairyClash.grade)) { if (list == null || list.Count == 0) { fairyClash.clashTxt1.Display(Language.Get("FamilyMatchNoOneHere")); fairyClash.clashTxt1.SetAdaptive(false); fairyClash.clashTxt2.Display(Language.Get("FamilyMatchNoOneHere")); fairyClash.clashTxt2.SetAdaptive(false); fairyClash.clashTxt3.Display(Language.Get("FamilyMatchNoOneHere")); fairyClash.clashTxt3.SetAdaptive(false); fairyClash.clashTxt4.Display(Language.Get("FamilyMatchNoOneHere")); fairyClash.clashTxt4.SetAdaptive(false); continue; } m_StringBuilder.Length = 0; var _fairyId = list[0].GetWinFairyId(); m_StringBuilder.Append(list[0].GetWinFairyName()); m_StringBuilder.Append(list[0].IsFairyDissolve(list[0].GetWinFairyId()) ? Language.Get("LeagueState_Dissolve") : string.Empty); m_StringBuilder.Append(fairyClash.grade < 5 ? Language.Get("LeagueState_Promote") : string.Empty); fairyClash.clashTxt1.Display(m_StringBuilder.ToString()); fairyClash.clashTxt1.SetAdaptive(_fairyId == PlayerDatas.Instance.baseData.Family && PlayerDatas.Instance.baseData.Family > 0); m_StringBuilder.Length = 0; _fairyId = list[0].GetLoserFairyId(); var loserFairyName = list[0].GetLoserFairyName(); if (string.IsNullOrEmpty(loserFairyName)) { loserFairyName = Language.Get("FamilyMatchNoOneHere"); } m_StringBuilder.Append(loserFairyName); m_StringBuilder.Append(list[0].IsFairyDissolve(list[0].GetLoserFairyId()) ? Language.Get("LeagueState_Dissolve") : string.Empty); fairyClash.clashTxt2.Display(m_StringBuilder.ToString()); fairyClash.clashTxt2.SetAdaptive(_fairyId == PlayerDatas.Instance.baseData.Family && PlayerDatas.Instance.baseData.Family > 0); if (list.Count < 2) { fairyClash.clashTxt3.Display(Language.Get("FamilyMatchNoOneHere")); fairyClash.clashTxt3.SetAdaptive(false); fairyClash.clashTxt4.Display(Language.Get("FamilyMatchNoOneHere")); fairyClash.clashTxt4.SetAdaptive(false); continue; } m_StringBuilder.Length = 0; _fairyId = list[1].GetWinFairyId(); m_StringBuilder.Append(list[1].GetWinFairyName()); m_StringBuilder.Append(list[1].IsFairyDissolve(list[1].GetWinFairyId()) ? Language.Get("LeagueState_Dissolve") : string.Empty); fairyClash.clashTxt3.Display(m_StringBuilder.ToString()); fairyClash.clashTxt3.SetAdaptive(_fairyId == PlayerDatas.Instance.baseData.Family && PlayerDatas.Instance.baseData.Family > 0); m_StringBuilder.Length = 0; _fairyId = list[1].GetLoserFairyId(); loserFairyName = list[1].GetLoserFairyName(); if (string.IsNullOrEmpty(loserFairyName)) { loserFairyName = Language.Get("FamilyMatchNoOneHere"); } m_StringBuilder.Append(loserFairyName); m_StringBuilder.Append(list[1].IsFairyDissolve(list[1].GetLoserFairyId()) ? Language.Get("LeagueState_Dissolve") : string.Empty); m_StringBuilder.Append(Language.Get("LeagueState_Demotion")); fairyClash.clashTxt4.Display(m_StringBuilder.ToString()); fairyClash.clashTxt4.SetAdaptive(_fairyId == PlayerDatas.Instance.baseData.Family && PlayerDatas.Instance.baseData.Family > 0); continue; } if (list == null || list.Count == 0) { fairyClash.fairyNameLeft1.Display(Language.Get("FamilyMatchNoOneHere")); fairyClash.fairyNameLeft1.SetAdaptive(false); fairyClash.fairyNameLeft2.Display(Language.Get("FamilyMatchNoOneHere")); fairyClash.fairyNameLeft2.SetAdaptive(false); fairyClash.fairyNameRight1.Display(Language.Get("FamilyMatchNoOneHere")); fairyClash.fairyNameRight1.SetAdaptive(false); fairyClash.fairyNameRight2.Display(Language.Get("FamilyMatchNoOneHere")); fairyClash.fairyNameRight2.SetAdaptive(false); continue; } var k = 0; for (; k < list.Count; k++) { for (int f = 0; f < 2; f++) { m_StringBuilder.Length = 0; var _fairyId = f == 0 ? list[k].fairyId1 : list[k].fairyId2; var _fairyName = f == 0 ? list[k].fairyName1 : list[k].fairyName2; if (_fairyId == 0) { m_StringBuilder.Append(Language.Get("StepRing")); } else { if (f == 1) { m_StringBuilder.Append(_fairyName); } if (list[k].IsFairyDissolve(_fairyId)) { m_StringBuilder.Append(Language.Get("LeagueState_Dissolve")); } else { if (list[k].IsFairyWin(_fairyId)) { m_StringBuilder.Append(Language.Get("LeagueState_Win")); } else if (list[k].IsFairyWin(f == 0 ? list[k].fairyId2 : list[k].fairyId1) && list[k].IsFairyDissolve(f == 0 ? list[k].fairyId2 : list[k].fairyId1)) { m_StringBuilder.Append(Language.Get("LeagueState_Defeat")); } } if (f == 0) { m_StringBuilder.Append(_fairyName); } } fairyClash.SetFairyName(k, f == 0, m_StringBuilder.ToString(), _fairyId); } } if (k == 1) { fairyClash.SetFairyName(1, true, Language.Get("FamilyMatchNoOneHere"), 0); fairyClash.SetFairyName(1, false, Language.Get("FamilyMatchNoOneHere"), 0); } } } private void OnFairyStoreBtn() { if (!fairyModel.fairyStoreOpen) { fairyModel.ProcessErrorTip(); return; } m_storeModel.ControllerRedPoint(true); WindowCenter.Instance.Open(); } private void OnBattleGoundBtn() { int _error = 0; if (!model.SatisfyEnterLeague(out _error)) { model.DisplayErrorTip(_error); return; } ModelCenter.Instance.GetModel().SingleChallenge(FairyLeagueModel.FAIRY_LEAGUE_DUNGEON); } private void OnRuneBtn() { FuncRules.OpenFuncRule("FamilyMatch_HowToPlay"); } [Serializable] public class FairyLeagueName { public int grade; public List fairyNameList; } [Serializable] public class FairyClash { public int grade; public FairyNameAdaptive clashTxt1; public FairyNameAdaptive clashTxt2; public FairyNameAdaptive clashTxt3; public FairyNameAdaptive clashTxt4; public FairyNameAdaptive fairyNameLeft1; public FairyNameAdaptive fairyNameLeft2; public FairyNameAdaptive fairyNameRight1; public FairyNameAdaptive fairyNameRight2; [SerializeField] RectTransform m_ContainerLeagueOver; [SerializeField] RectTransform m_ContainerLeagueRun; public void SetActive(bool _leagueOver) { m_ContainerLeagueOver.gameObject.SetActive(_leagueOver); m_ContainerLeagueRun.gameObject.SetActive(!_leagueOver); } public void SetFairyName(int _index, bool _left, string _name, int _fairyId) { switch (_index) { case 0: if (_left) { fairyNameLeft1.Display(_name); fairyNameLeft1.SetAdaptive(_fairyId == PlayerDatas.Instance.baseData.Family && PlayerDatas.Instance.baseData.Family > 0); } else { fairyNameRight1.Display(_name); fairyNameRight1.SetAdaptive(_fairyId == PlayerDatas.Instance.baseData.Family && PlayerDatas.Instance.baseData.Family > 0); } break; case 1: if (_left) { fairyNameLeft2.Display(_name); fairyNameLeft2.SetAdaptive(_fairyId == PlayerDatas.Instance.baseData.Family && PlayerDatas.Instance.baseData.Family > 0); } else { fairyNameRight2.Display(_name); fairyNameRight2.SetAdaptive(_fairyId == PlayerDatas.Instance.baseData.Family && PlayerDatas.Instance.baseData.Family > 0); } break; } } } } }