using System; using System.Collections.Generic; using System.Linq; using Cysharp.Threading.Tasks; using UnityEngine; using UnityEngine.UI; /// /// 公会申请列表界面 /// public class GuildApplyListWin : UIBase { [SerializeField] Transform noApply; [SerializeField] Transform bgImage; [SerializeField] ScrollerController scroller; [SerializeField] Toggle lowOfficialToggle; [SerializeField] Toggle joinFreeToggle; [SerializeField] Toggle sortToggle; [SerializeField] Dropdown dropdown; [SerializeField] ButtonEx rejectAllButton; [SerializeField] TextEx countText; GuildManager manager { get { return GuildManager.Instance; } } protected override void InitComponent() { lowOfficialToggle.AddListener((bool value) => { if (!PlayerDatas.Instance.fairyData.HasFairy) return; int lv = GetLvByIndex(dropdown.value); manager.SendChangeFamilyJoin(joinFreeToggle.isOn ? 0 : 1, value ? lv : 0); }); joinFreeToggle.AddListener((bool value) => { if (!PlayerDatas.Instance.fairyData.HasFairy) return; int lv = GetLvByIndex(dropdown.value); manager.SendChangeFamilyJoin(value ? 0 : 1, PlayerDatas.Instance.fairyData.fairy.JoinLVMin); }); sortToggle.AddListener((bool value) => { manager.isPowerSort = value; Display(); }); dropdown.SetListener(OnDropdownValueChanged); rejectAllButton.SetListener(() => { manager.SendJoinFamilyReply(0, false); }); } protected override void OnPreOpen() { scroller.lockType = EnhanceLockType.KeepVertical; manager.OnRefreshApplyList += OnRefreshApplyList; PlayerDatas.Instance.fairyData.OnRefreshFairyInfo += OnRefreshFairyInfo; GuildManager.Instance.EnterOrQuitGuildEvent += OnEnterOrQuitGuildEvent; scroller.OnRefreshCell += OnRefreshCell; Display(); } protected override void OnPreClose() { manager.OnRefreshApplyList -= OnRefreshApplyList; PlayerDatas.Instance.fairyData.OnRefreshFairyInfo -= OnRefreshFairyInfo; GuildManager.Instance.EnterOrQuitGuildEvent -= OnEnterOrQuitGuildEvent; scroller.OnRefreshCell -= OnRefreshCell; } private void OnEnterOrQuitGuildEvent(bool isEnter) { DelayCloseWindow().Forget(); } private void OnRefreshFairyInfo() { if (!PlayerDatas.Instance.fairyData.HasFairy || !PlayerDatas.Instance.fairyData.IsCanFunc(LimitFunc.CanCall)) { DelayCloseWindow().Forget(); return; } Display(); } private void OnRefreshApplyList() { Display(); } List list; private void OnRefreshCell(ScrollerDataType type, CellView cell) { var _cell = cell.GetComponent(); _cell?.Display(cell.index, list); } List optionKeys; List optionValues; private int GetLvByIndex(int index) { if (!PlayerDatas.Instance.fairyData.HasFairy) return 0; if (index < 0 || index >= optionKeys.Count) return 0; int lv = optionKeys[index]; return lv; } private void OnDropdownValueChanged(int index) { int lv = GetLvByIndex(index); if (PlayerDatas.Instance.fairyData.fairy.JoinLVMin == lv) return; if (lowOfficialToggle.isOn) { manager.SendChangeFamilyJoin(PlayerDatas.Instance.fairyData.fairy.JoinReview, lv); } } private void CreateScroller() { scroller.Refresh(); if (!manager.isPowerSort) { list = new List(manager.GetApplyList()); } else { list = new List(manager.GetApplyList().OrderByDescending(x => x.FightPower)); } bool isNullOrEmpty = list.IsNullOrEmpty(); bgImage.SetActive(!isNullOrEmpty); noApply.SetActive(isNullOrEmpty); if (!isNullOrEmpty) { for (int i = 0; i < list.Count; i++) { scroller.AddCell(ScrollerDataType.Header, i); } } scroller.Restart(); } private void CreateDropdown() { if (!manager.TryGetApplyOptions(out optionKeys, out optionValues)) return; dropdown.ClearOptions(); dropdown.AddOptions(optionValues); int joinLVMin = PlayerDatas.Instance.fairyData.fairy.JoinLVMin; int index = optionKeys.IndexOf(joinLVMin); dropdown.value = index < 0 ? 0 : index; } private void CreateToggle() { lowOfficialToggle.SetIsOnWithoutNotify(PlayerDatas.Instance.fairyData.fairy.JoinLVMin > 0); joinFreeToggle.SetIsOnWithoutNotify(PlayerDatas.Instance.fairyData.fairy.JoinReview == 0); sortToggle.SetIsOnWithoutNotify(manager.isPowerSort); } private void Display() { if (!PlayerDatas.Instance.fairyData.HasFairy) return; CreateToggle(); CreateDropdown(); CreateScroller(); List list = manager.GetApplyList(); countText.text = Language.Get("GuildApplyList05", list != null ? list.Count : 0, manager.requestPlayerCount); } }