using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace vnxbqy.UI { public class FairyApplyWin : Window { [SerializeField] Button requestBtn; [SerializeField] Button joinBtn; [SerializeField] Button createBtn; [SerializeField] Button searchBtn; [SerializeField] Button exitBtn; [SerializeField] InputField searchInput; [SerializeField] ScrollerController m_Control; int m_RecordFairyCount = 0; string m_SearchLabel = string.Empty; private FairyModel m_Model; private FairyModel model { get { return m_Model ?? (m_Model = ModelCenter.Instance.GetModel()); } } private void OnRefreshFairyMine() { if (!PlayerDatas.Instance.fairyData.HasFairy) { model.page = 0; model.presentFairy = -1; model.fairyList.Clear(); model.OnSearchPageList(); OnRefreshFairyList(); OnRefreshFariyInfo(); } } private void OnRefreshFairySearch() { model.fairyList.Clear(); List list = PlayerDatas.Instance.fairyData.GetSearchFairy(); model.fairyList.AddRange(list); OnRefreshFairyList(true); } private void OnRefreshFariyInfo() { requestBtn.SetActive(!PlayerDatas.Instance.fairyData.HasFairy); joinBtn.SetActive(!PlayerDatas.Instance.fairyData.HasFairy); createBtn.SetActive(!PlayerDatas.Instance.fairyData.HasFairy); exitBtn.SetActive(PlayerDatas.Instance.fairyData.HasFairy); } private void OnFairyListRefresh() { List list = PlayerDatas.Instance.fairyData.GetFairyListByPage(model.page); if (model.page == 0) { model.fairyList.Clear(); } if (list != null) { model.fairyList.AddRange(list); } int index = m_Control.m_Scorller.StartCellViewIndex; OnRefreshFairyList(); if (index < model.fairyList.Count && index >= 0) { m_Control.JumpIndex(index); } OnRefreshFariyInfo(); } private void OnRefreshFairyList(bool search = false) { m_Control.Refresh(); if (model.fairyList != null) { for (int i = 0; i < model.fairyList.Count; i++) { m_Control.AddCell(ScrollerDataType.Header, i, OnFairyClick); } if (!search) { var _count = Mathf.Min(model.jiaFairyCount - model.fairyList.Count, model.jiaFairyIds.Count); _count = Mathf.Max(0, _count); for (int i = 0; i < _count; i++) { m_Control.AddCell(ScrollerDataType.Header, FairyModel.JiaFairyStartIndex + i, OnFairyClick); } } else { var _count = Mathf.Min(model.jiaFairyCount - m_RecordFairyCount, model.jiaFairyIds.Count); _count = Mathf.Max(0, _count); for (int i = 0; i < _count; i++) { var jiaName = model.jiaFairyNames[model.jiaFairyIds[i] - 1]; if (jiaName.Contains(m_SearchLabel)) { m_Control.AddCell(ScrollerDataType.Header, FairyModel.JiaFairyStartIndex + i, OnFairyClick); } } } } m_Control.Restart(); m_Control.JumpIndex(0); } private void OnFairyClick(CellView cell) { int index = cell.index; if (model.presentFairy == cell.index) { model.presentFairy = -1; } else { model.presentFairy = index; } m_Control.m_Scorller.RefreshActiveCellViews(); } private void OnSearchBtn() { if (searchInput.text == string.Empty) { model.page = 0; model.presentFairy = -1; model.OnSearchPageList(); model.fairyList.Clear(); OnRefreshFairyList(); return; } C0F0D_tagCSearchFamily searchPack = new C0F0D_tagCSearchFamily(); searchPack.MsgLen = (byte)ChatCtrl.GetUTF8InfoLen(searchInput.text); searchPack.Msg = searchInput.text; GameNetSystem.Instance.SendInfo(searchPack); m_SearchLabel = searchInput.text; if (!PlayerDatas.Instance.fairyData.IsSearching) { m_RecordFairyCount = model.fairyList != null ? model.fairyList.Count : 0; } } private void OnCreateFairyBtn() { if (!CheckLv()) { return; } WindowCenter.Instance.Open(); } private void OnJoinBtn() { if (!CheckLv()) { return; } if (model.jiaFairyIds.Count > 0) { CA404_tagCGPyCreatFamily _pak = new CA404_tagCGPyCreatFamily(); _pak.FakeID = (ushort)model.jiaFairyIds[0]; _pak.Name = model.jiaFairyNames[_pak.FakeID - 1]; GameNetSystem.Instance.SendInfo(_pak); return; } if(model.fairyList != null && model.fairyList.Count > 0) { CA411_tagCGOneKeyJoinFamily _pak = new CA411_tagCGOneKeyJoinFamily(); GameNetSystem.Instance.SendInfo(_pak); } else if (NewBieCenter.Instance.inGuiding) { OnCreateFairyBtn(); } else { SysNotifyMgr.Instance.ShowTip("NoneFairy"); } } bool CheckLv() { int limit = FuncOpenLVConfig.Get((int)FuncOpenEnum.Fairy).LimitLV; if (PlayerDatas.Instance.baseData.LV < limit) { ServerTipDetails.DisplayNormalTip(Language.Get("L1106", limit)); return false; } return true; } private void OnRequestBtn() { if (!CheckLv()) { return; } if (model.presentFairy >= FairyModel.JiaFairyStartIndex) { var _index = model.presentFairy - FairyModel.JiaFairyStartIndex; CA404_tagCGPyCreatFamily _pak = new CA404_tagCGPyCreatFamily(); _pak.FakeID = (ushort)model.jiaFairyIds[_index]; _pak.Name = model.jiaFairyNames[_pak.FakeID - 1]; GameNetSystem.Instance.SendInfo(_pak); return; } if (model.presentFairy < 0 || model.presentFairy >= model.fairyList.Count) { ServerTipDetails.DisplayNormalTip(Language.Get("L1016")); return; } PlayerFairyData.FairyData fairy = model.fairyList[model.presentFairy]; if (fairy != null) { FamilyConfig cfg = FamilyConfig.Get(fairy.FamilyLV); if (fairy.MemberCount >= cfg.memberCnt) { ServerTipDetails.DisplayNormalTip(Language.Get("L1017")); return; } if (model.FairyRequested((int)fairy.FamilyID)) { SysNotifyMgr.Instance.ShowTip("FairyRequested"); return; } CA602_tagCGRequesJoinFamily rqPack = new CA602_tagCGRequesJoinFamily(); rqPack.Type = 0; rqPack.AddFamilyID = fairy.FamilyID; GameNetSystem.Instance.SendInfo(rqPack); } } private void OnExitBtn() { var auctionModel = ModelCenter.Instance.GetModel(); if (!auctionModel.SatisfyQuitFairy((int)PlayerDatas.Instance.baseData.PlayerID)) { SysNotifyMgr.Instance.ShowTip("Paimai8"); return; } PlayerFairyData.FairyData fairy = PlayerDatas.Instance.fairyData.fairy; if (fairy != null) { if (PlayerDatas.Instance.fairyData.mine.FamilyLV == 3 && fairy.MemberCount > 1) { ServerTipDetails.DisplayNormalTip(Language.Get("L1018")); return; } else { ConfirmCancel.ShowPopConfirm(Language.Get("Mail101"), Language.Get("ExitFamily", UIHelper.ServerStringTrim(fairy.FamilyName)), (bool isOk) => { if (isOk) { C0F0A_tagCLeaveFamily leavePack = new C0F0A_tagCLeaveFamily(); leavePack.Type = 0; GameNetSystem.Instance.SendInfo(leavePack); } }); } } } private void JiaFairyUpdateEvent() { OnRefreshFairyList(); } protected override void BindController() { } protected override void AddListeners() { requestBtn.onClick.AddListener(OnRequestBtn); joinBtn.onClick.AddListener(OnJoinBtn); createBtn.onClick.AddListener(OnCreateFairyBtn); searchBtn.onClick.AddListener(OnSearchBtn); exitBtn.onClick.AddListener(OnExitBtn); } protected override void OnPreOpen() { PlayerDatas.Instance.fairyData.OnRefreshFairyList += OnFairyListRefresh; PlayerDatas.Instance.fairyData.OnRefreshFairyInfo += OnRefreshFariyInfo; PlayerDatas.Instance.fairyData.OnRefreshFairyMine += OnRefreshFairyMine; PlayerDatas.Instance.fairyData.OnRefreshFairySearch += OnRefreshFairySearch; SysNotifyMgr.Instance.sysNotifyEvent += SysNotifyEvent; model.JiaFairyUpdateEvent += JiaFairyUpdateEvent; searchInput.text = string.Empty; PlayerDatas.Instance.fairyData.ClearFairyList(); model.page = 0; model.presentFairy = -1; model.OnSearchPageList(); model.fairyList.Clear(); OnRefreshFairyList(); OnRefreshFariyInfo(); if (AchievementGoto.achievementType == AchievementGoto.CreateOrJoinFairy) { SnxxzGame.Instance.StartCoroutine(Co_HandleAchievement()); } } private void SysNotifyEvent(string _key, ArrayList arg2) { if (_key.Equals("jiazu_liubo_671654") && model.fairyList.Count < PlayerFairyData.PageCnt) { model.OnSearchPageList(); } } protected override void OnAfterOpen() { } protected override void OnAfterClose() { } protected override void OnPreClose() { PlayerDatas.Instance.fairyData.OnRefreshFairyList -= OnFairyListRefresh; PlayerDatas.Instance.fairyData.OnRefreshFairyInfo -= OnRefreshFariyInfo; PlayerDatas.Instance.fairyData.OnRefreshFairyMine -= OnRefreshFairyMine; PlayerDatas.Instance.fairyData.OnRefreshFairySearch -= OnRefreshFairySearch; SysNotifyMgr.Instance.sysNotifyEvent -= SysNotifyEvent; model.JiaFairyUpdateEvent -= JiaFairyUpdateEvent; } IEnumerator Co_HandleAchievement() { yield return WaitingForSecondConst.WaitMS500; if (PlayerDatas.Instance.fairyData.HasFairy) { yield break; } var _effect = AchievementGuideEffectPool.Require(1); if (model.fairyList != null && model.fairyList.Count > 0) { _effect.transform.SetParentEx(joinBtn.transform, Vector3.zero, Vector3.zero, Vector3.one); } else { _effect.transform.SetParentEx(createBtn.transform, Vector3.zero, Vector3.zero, Vector3.one); } } } }