using Cysharp.Threading.Tasks; using UnityEngine; public class GuildAtkDefBatRecordWin : UIBase { [SerializeField] GuildEmblemCell myEmblem; [SerializeField] TextEx myGuildName; [SerializeField] TextEx myStatCnt; [SerializeField] RectTransform enemyRect; [SerializeField] GuildEmblemCell enemyEmblem; [SerializeField] TextEx enemyGuildName; [SerializeField] TextEx enemyStatCnt; [SerializeField] RectTransform noJoinRect; [SerializeField] TextEx recordCnt; [SerializeField] ScrollerController scroller; [SerializeField] RectTransform noRect; [SerializeField] ButtonEx myEmblemBtn; [SerializeField] ButtonEx enemyEmblemBtn; GuildAtkDefBatManager manager { get { return GuildAtkDefBatManager.Instance; } } protected override void InitComponent() { base.InitComponent(); // 己方公会徽章点击 - 自己的公会 myEmblemBtn.AddListener(() => { SysNotifyMgr.Instance.ShowTip("GuildTip01"); }); // 敌方公会徽章点击 enemyEmblemBtn.AddListener(() => { var enemyInfo = manager.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 (manager.IsSystemFamily(enemyInfo.FamilyID)) return; // 查看公会信息 GuildManager.Instance.SendViewGuild(familyID, serverID); }); } protected override void OnPreOpen() { base.OnPreOpen(); scroller.OnRefreshCell += OnRefreshCell; manager.OnUpdateAtkDefBatLogEvent += OnUpdateLogEvent; GuildManager.Instance.OnUpdateViewFamilyInfo += OnUpdateViewFamilyInfo; Display(); } protected override void OnPreClose() { base.OnPreClose(); scroller.OnRefreshCell -= OnRefreshCell; manager.OnUpdateAtkDefBatLogEvent -= OnUpdateLogEvent; GuildManager.Instance.OnUpdateViewFamilyInfo -= OnUpdateViewFamilyInfo; } private void OnUpdateViewFamilyInfo(int familyID) { if (!GuildManager.Instance.viewGuildsDict.ContainsKey(familyID)) return; if (!UIManager.Instance.IsOpened()) { GuildPreviewWin.SetShowOpearteBtn(false); UIManager.Instance.OpenWindow(familyID); } } private void OnUpdateLogEvent() { DisplayLogs(); } public void Display() { DisplayInfo(); DisplayLogs(); } /// /// 显示顶部记分板(参照 GuildAtkDefBatWin.DisplayInfo 的规则) /// void DisplayInfo() { var myFamilyInfo = manager.MyFamilyInfo; if (myFamilyInfo != null) { myGuildName.text = myFamilyInfo.FamilyName; myEmblem.Display((int)myFamilyInfo.EmblemID, myFamilyInfo.EmblemWord, 0.7f); myStatCnt.text = myFamilyInfo.TotalStar.ToString(); } else { myStatCnt.text = "0"; } var enemyFamilyInfo = manager.EnemyFamilyInfo; if (enemyFamilyInfo != null) { bool isSystemFamily = manager.IsSystemFamily(enemyFamilyInfo.FamilyID); if (isSystemFamily) { string enemyName = Language.Get("GuildAtkDefBat31"); enemyGuildName.text = enemyName; enemyEmblem.Display(FamilyEmblemConfig.GetFirstDefaultEmblem(), !string.IsNullOrEmpty(enemyName) ? enemyName[0].ToString() : string.Empty, 0.7f); enemyStatCnt.text = enemyFamilyInfo.TotalStar.ToString(); } else { enemyGuildName.text = enemyFamilyInfo.FamilyName; enemyEmblem.Display((int)enemyFamilyInfo.EmblemID, enemyFamilyInfo.EmblemWord, 0.7f); enemyStatCnt.text = enemyFamilyInfo.TotalStar.ToString(); } } else { enemyStatCnt.text = "0"; } int displayState = manager.GetGuildBattleDisplayState(); noJoinRect.SetActive(displayState == 1 && enemyFamilyInfo == null); enemyRect.SetActive(displayState != 1 && enemyFamilyInfo != null); } /// /// 显示日志 Scroller 列表 /// void DisplayLogs() { scroller.Refresh(); var logs = manager.atkDefBatLogs; int showCount = 0; if (logs != null && logs.Count > 0) { int maxCount = Mathf.Max(1, manager.maxLogCount); for (int i = 0; i < logs.Count && showCount < maxCount; i++) { if (IsEnemySweepLog(logs[i])) continue; scroller.AddCell(ScrollerDataType.Header, i); showCount++; } } recordCnt.text = Language.Get("GuildAtkDefBat10", manager.maxLogCount); noRect.SetActive(showCount <= 0); scroller.Restart(); } bool IsEnemySweepLog(GuildAtkDefBatManager.GuildAtkDefBatLogEntry logEntry) { if (logEntry == null || logEntry.action == null) return false; return logEntry.familyID != (uint)manager.MyFamilyID && logEntry.action.Value1 == 0; } void OnRefreshCell(ScrollerDataType type, CellView cell) { var logCell = cell as GuildAtkDefBatRecordCell; if (logCell != null && cell.index >= 0 && cell.index < manager.atkDefBatLogs.Count) { logCell.SetLogData(manager.atkDefBatLogs[cell.index]); } } }