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<HA525_tagSCFamilyAtkDefBatInfo.tagSCFamilyAtkDefBatMem> m_SortedDefenders;
|
private List<HA525_tagSCFamilyAtkDefBatInfo.tagSCFamilyAtkDefBatMem> 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<GuildAtkDefBatRecordWin>();
|
});
|
rankButton.SetListener(() =>
|
{
|
UIManager.Instance.OpenWindow<GuildAtkDefBatRankWin>();
|
});
|
|
// 己方公会徽章点击 - 自己的公会
|
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(), GuildManager.Instance.LimitEmblemWord(enemyName), 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();
|
}
|
|
/// <summary>
|
/// 刷新战场Scroller数据
|
/// </summary>
|
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<HA525_tagSCFamilyAtkDefBatInfo.tagSCFamilyAtkDefBatMem>();
|
}
|
|
// 前3个用于HeaderCell,剩下的给NormalCell
|
int headerCount = Mathf.Min(3, m_SortedDefenders.Count);
|
m_RemainingDefenders = new List<HA525_tagSCFamilyAtkDefBatInfo.tagSCFamilyAtkDefBatMem>();
|
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();
|
}
|
|
/// <summary>
|
/// Scroller Cell刷新回调
|
/// </summary>
|
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>())
|
{
|
GuildPreviewWin.SetShowOpearteBtn(false);
|
UIManager.Instance.OpenWindow<GuildPreviewWin>(familyID);
|
}
|
}
|
}
|