using System; using System.Collections.Generic; using Cysharp.Threading.Tasks; using UnityEngine; public class GuildAtkDefBatBattlePanelWin : OneLevelWin { [SerializeField] GuildEmblemCell myEmblemCell; [SerializeField] TextEx myNameText; [SerializeField] TextEx myServerText; [SerializeField] TextEx myStarCntText; [SerializeField] RectTransform enemyRect; [SerializeField] GuildEmblemCell enemyEmblemCell; [SerializeField] TextEx enemyNameText; [SerializeField] TextEx enemyServerText; [SerializeField] TextEx enemyStarCntText; [SerializeField] RectTransform noJoinRect; [SerializeField] TextEx timeText; [SerializeField] ButtonEx funPresetDefBtn; [SerializeField] ButtonEx funPresetAtkBtn; [SerializeField] ButtonEx recordBtn; [SerializeField] ButtonEx rankButton; [SerializeField] ButtonEx myEmblemBtn; [SerializeField] ButtonEx enemyEmblemBtn; [SerializeField] TextEx[] top3NameText; [SerializeField] TextEx rankTipText; [SerializeField] ImageEx atkCntImage; [SerializeField] ScrollerController scroller; // 战场scroller数据 private bool m_IsMySide; // 缓存打开时的 displayState,用于过天判断是否发生变化以关闭窗口 private int m_CachedDisplayState; private List m_SortedDefenders; private List m_RemainingDefenders; protected override void InitComponent() { base.InitComponent(); funPresetDefBtn.AddListener(() => { FuncPresetManager.Instance.ClickBattlePreset((int)BattlePreSetType.GuildAtkDefBat); }); funPresetAtkBtn.AddListener(() => { FuncPresetManager.Instance.ClickBattlePreset((int)BattlePreSetType.Story); }); recordBtn.AddListener(() => { UIManager.Instance.OpenWindow(); }); rankButton.SetListener(() => { UIManager.Instance.OpenWindow(); }); // 己方公会徽章点击 - 自己的公会 myEmblemBtn.AddListener(() => { SysNotifyMgr.Instance.ShowTip("GuildTip01"); }); // 敌方公会徽章点击 enemyEmblemBtn.AddListener(() => { var enemyInfo = GuildAtkDefBatManager.Instance.EnemyFamilyInfo; if (enemyInfo == null) return; int familyID = (int)enemyInfo.FamilyID; int serverID = (int)enemyInfo.ServerID; // 自己的公会 if (PlayerDatas.Instance.fairyData.HasFairy && PlayerDatas.Instance.fairyData.fairy.FamilyID == familyID) { SysNotifyMgr.Instance.ShowTip("GuildTip01"); return; } // 系统公会 if (GuildAtkDefBatManager.Instance.IsSystemFamily(enemyInfo.FamilyID)) return; // 查看公会信息 GuildManager.Instance.SendViewGuild(familyID, serverID); }); } protected override void OnPreOpen() { // 根据当前时期设置默认Tab:备战期->我方战场,激战期->敌方战场 int displayState = GuildAtkDefBatManager.Instance.GetGuildBattleDisplayState(); if (displayState == 2) functionOrder = 0; // 备战期默认我方战场 else if (displayState == 3) functionOrder = 1; // 激战期默认敌方战场 base.OnPreOpen(); scroller.OnRefreshCell += OnRefreshCell; GlobalTimeEvent.Instance.secondEvent += OnSecondEvent; GuildAtkDefBatManager.Instance.OnUpdateAtkDefBatInfoEvent += OnUpdateAtkDefBatInfoEvent; GuildManager.Instance.OnUpdateViewFamilyInfo += OnUpdateViewFamilyInfo; TimeMgr.Instance.OnDayEvent += OnDayRefresh; m_CachedDisplayState = displayState; Display(); } protected override void OnPreClose() { base.OnPreClose(); scroller.OnRefreshCell -= OnRefreshCell; GlobalTimeEvent.Instance.secondEvent -= OnSecondEvent; GuildAtkDefBatManager.Instance.OnUpdateAtkDefBatInfoEvent -= OnUpdateAtkDefBatInfoEvent; GuildManager.Instance.OnUpdateViewFamilyInfo -= OnUpdateViewFamilyInfo; TimeMgr.Instance.OnDayEvent -= OnDayRefresh; } private void OnUpdateAtkDefBatInfoEvent() { OnDayRefresh(); Display(); } private void OnDayRefresh() { int currentState = GuildAtkDefBatManager.Instance.GetGuildBattleDisplayState(); if (currentState != m_CachedDisplayState) CloseWindow(); } private void OnSecondEvent() { DisplayTime(); } protected override void OnTabButtonClicked(int index) { // 对敌方Tab进行锁定管理:备战期锁定(阻止GroupButtonEx.OnPointerClick执行SelectBtn),其他时期解锁 tabButtons[1].isLock = GuildAtkDefBatManager.Instance.GetGuildBattleDisplayState() == 2; // 备战期点击敌方战场Tab时阻止切换并提示 if (tabButtons[1].isLock && index == 1) { SysNotifyMgr.Instance.ShowTip("GuildAtkDefBat2"); return; } base.OnTabButtonClicked(index); } void DisplayTime() { timeText.text = Language.Get("PhantasmPavilion10", UIHelper.AppendColor(TextColType.LightGreen, GuildAtkDefBatManager.Instance.GetGetCountdownToCurrentPeriodEndString())); } void Display() { DisplayInfo(); DisplayTime(); RefreshBattleScroller(); } void DisplayInfo() { var myFamilyInfo = GuildAtkDefBatManager.Instance.MyFamilyInfo; if (myFamilyInfo != null) { myNameText.text = myFamilyInfo.FamilyName; myServerText.text = ServerListCenter.Instance.GetServerName(UIHelper.GetServerIDByAccount(PlayerDatas.Instance.baseData.AccID)); myEmblemCell.Display((int)myFamilyInfo.EmblemID, myFamilyInfo.EmblemWord, 0.7f); myStarCntText.text = myFamilyInfo.TotalStar.ToString(); } else { myStarCntText.text = "0"; } var enemyFamilyInfo = GuildAtkDefBatManager.Instance.EnemyFamilyInfo; if (enemyFamilyInfo != null) { bool isSystemFamily = GuildAtkDefBatManager.Instance.IsSystemFamily(enemyFamilyInfo.FamilyID); if (isSystemFamily) { string enemyName = Language.Get("GuildAtkDefBat31"); enemyNameText.text = enemyName; enemyEmblemCell.Display(FamilyEmblemConfig.GetFirstDefaultEmblem(), !string.IsNullOrEmpty(enemyName) ? enemyName[0].ToString() : string.Empty, 0.7f); enemyServerText.text = ServerListCenter.Instance.GetServerName(UIHelper.GetServerIDByAccount(PlayerDatas.Instance.baseData.AccID)); enemyStarCntText.text = enemyFamilyInfo.TotalStar.ToString(); } else { enemyNameText.text = enemyFamilyInfo.FamilyName; enemyEmblemCell.Display((int)enemyFamilyInfo.EmblemID, enemyFamilyInfo.EmblemWord, 0.7f); enemyServerText.text = ServerListCenter.Instance.GetServerName((int)enemyFamilyInfo.ServerID); enemyStarCntText.text = enemyFamilyInfo.TotalStar.ToString(); } } else { enemyStarCntText.text = "0"; } int displayState = GuildAtkDefBatManager.Instance.GetGuildBattleDisplayState(); noJoinRect.SetActive(displayState == 1 && enemyFamilyInfo == null); enemyRect.SetActive(displayState != 1 && enemyFamilyInfo != null); ShowTop3(); } void ShowTop3() { atkCntImage.SetActive(GuildAtkDefBatManager.Instance.BatState == 3); var sortedMembers = GuildAtkDefBatManager.Instance.GetSortedFamilyMembers(); int top3Count = Mathf.Min(top3NameText.Length, sortedMembers.Count); for (int i = 0; i < top3NameText.Length; i++) { if (i < top3Count) { top3NameText[i].text = sortedMembers[i].Name; } else { top3NameText[i].text = Language.Get("L1124"); } } rankTipText.text = Language.Get("GuildAtkDefBat37", GuildAtkDefBatManager.Instance.GetMyRemainingChallengeCount(), GuildAtkDefBatManager.Instance.challengeCount); } protected override void OpenSubUIByTabIndex() { RefreshBattleScroller(); } /// /// 刷新战场Scroller数据 /// private void RefreshBattleScroller() { // 根据当前Tab设置己方/敌方 switch (functionOrder) { case 0: m_IsMySide = true; break; case 1: m_IsMySide = false; break; default: m_IsMySide = true; break; } // 获取排序后的防守成员列表 m_SortedDefenders = GuildAtkDefBatManager.Instance.GetSortedDefenders(m_IsMySide); if (m_SortedDefenders == null) { m_SortedDefenders = new List(); } // 前3个用于HeaderCell,剩下的给NormalCell int headerCount = Mathf.Min(3, m_SortedDefenders.Count); m_RemainingDefenders = new List(); for (int i = headerCount; i < m_SortedDefenders.Count; i++) { m_RemainingDefenders.Add(m_SortedDefenders[i]); } // 重新构建Scroller scroller.Refresh(); // 添加HeaderCell(第一条) scroller.AddCell(ScrollerDataType.Header, 0); // 剩余成员每2个一组添加NormalCell int remainingCount = m_RemainingDefenders.Count; int normalCellCount = Mathf.CeilToInt((float)remainingCount / 2); for (int i = 0; i < normalCellCount; i++) { scroller.AddCell(ScrollerDataType.Normal, i + 1); } scroller.Restart(); } /// /// Scroller Cell刷新回调 /// private void OnRefreshCell(ScrollerDataType type, CellView cell) { if (type == ScrollerDataType.Header) { var headerCell = cell as GuildAtkDefBatBattlePanelHeaderCell; if (headerCell != null) { headerCell.Display(m_IsMySide, m_SortedDefenders); } } else if (type == ScrollerDataType.Normal) { var normalCell = cell as GuildAtkDefBatBattlePanelNormalCell; if (normalCell != null) { // cell.index 从1开始(0是HeaderCell) int normalCellIndex = cell.index - 1; int startIdx = normalCellIndex * 2; HA525_tagSCFamilyAtkDefBatInfo.tagSCFamilyAtkDefBatMem mem1 = null; HA525_tagSCFamilyAtkDefBatInfo.tagSCFamilyAtkDefBatMem mem2 = null; if (startIdx < m_RemainingDefenders.Count) { mem1 = m_RemainingDefenders[startIdx]; } if (startIdx + 1 < m_RemainingDefenders.Count) { mem2 = m_RemainingDefenders[startIdx + 1]; } normalCell.Display(m_IsMySide, mem1, mem2); } } } private void OnUpdateViewFamilyInfo(int familyID) { if (!GuildManager.Instance.viewGuildsDict.ContainsKey(familyID)) return; if (!UIManager.Instance.IsOpened()) { GuildPreviewWin.SetShowOpearteBtn(false); UIManager.Instance.OpenWindow(familyID); } } }