using System;
|
using System.Collections.Generic;
|
using Cysharp.Threading.Tasks;
|
using DG.DemiEditor;
|
using UnityEngine;
|
|
public class GuildAtkDefBatWin : UIBase
|
{
|
[SerializeField] GuildEmblemCell myEmblemCell;
|
[SerializeField] TextEx myNameText;
|
[SerializeField] TextEx myServerText;
|
[SerializeField] ImageEx myLightImage;
|
[SerializeField] ImageEx myTextImage;
|
[SerializeField] TextEx myStarCntText;
|
[SerializeField] GuildAtkDefBatPlayerShowCell[] myModels;
|
|
|
[SerializeField] RectTransform enemyRect;
|
[SerializeField] GuildEmblemCell enemyEmblemCell;
|
[SerializeField] TextEx enemyNameText;
|
[SerializeField] TextEx enemyServerText;
|
[SerializeField] ImageEx enemyLightImage;
|
[SerializeField] ImageEx enemyTextImage;
|
[SerializeField] TextEx enemyStarCntText;
|
[SerializeField] GuildAtkDefBatPlayerShowCell[] enemyModels;
|
[SerializeField] RectTransform noJoinRect;
|
|
[SerializeField] RectTransform joinConditionRect;
|
[SerializeField] TextEx joinCntText;
|
[SerializeField] TextEx activityLevelText;
|
|
|
[SerializeField] TextEx timeText;
|
[SerializeField] ImageEx stateImage;
|
[SerializeField] ButtonEx goButton;
|
[SerializeField] ButtonEx backButton;
|
[SerializeField] ButtonEx rankButton;
|
[SerializeField] ButtonEx recordButton;
|
[SerializeField] ButtonEx shopButton;
|
[SerializeField] ButtonEx treasureButton;
|
|
[SerializeField] ButtonEx myEmblemBtn;
|
[SerializeField] ButtonEx enemyEmblemBtn;
|
|
protected override void InitComponent()
|
{
|
backButton.AddListener(CloseWindow);
|
rankButton.AddListener(() =>
|
{
|
UIManager.Instance.OpenWindowAsync<GuildAtkDefBatRankWin>().Forget();
|
});
|
recordButton.AddListener(() =>
|
{
|
UIManager.Instance.OpenWindowAsync<GuildAtkDefBatRecordWin>().Forget();
|
});
|
shopButton.AddListener(() =>
|
{
|
UIManager.Instance.OpenWindowAsync<GuildAtkDefBatShopWin>().Forget();
|
});
|
treasureButton.AddListener(() =>
|
{
|
UIManager.Instance.OpenWindowAsync<GuildAtkDefBatTreasureWin>().Forget();
|
});
|
goButton.AddListener(async () =>
|
{
|
// 检查是否有正在进行的战斗(参考ArenaTabHandler的模式)
|
BattleField guildAtkDefBatBattle = BattleManager.Instance.GetBattleFieldByMapID(GuildAtkDefBatManager.DataMapID);
|
if (guildAtkDefBatBattle != null)
|
{
|
GuildAtkDefBatBattleWin battleWin;
|
if (!UIManager.Instance.IsOpened<GuildAtkDefBatBattleWin>())
|
{
|
battleWin = await UIManager.Instance.OpenWindowAsync<GuildAtkDefBatBattleWin>();
|
}
|
else
|
{
|
battleWin = UIManager.Instance.GetUI<GuildAtkDefBatBattleWin>();
|
}
|
battleWin.SetBattleField(guildAtkDefBatBattle);
|
CloseWindow();
|
return;
|
}
|
|
// 对手公会已解散,不可进入战斗
|
var enemyInfo = GuildAtkDefBatManager.Instance.EnemyFamilyInfo;
|
if (enemyInfo != null && enemyInfo.IsDismiss == 1)
|
{
|
SysNotifyMgr.Instance.ShowTip("GuildAtkDefBat6");
|
return;
|
}
|
|
bool hasEligibility = GuildAtkDefBatManager.Instance.HasMyJoinEligibility();
|
if (!hasEligibility)
|
{
|
SysNotifyMgr.Instance.ShowTip("GuildAtkDefBat1");
|
return;
|
}
|
UIManager.Instance.OpenWindowAsync<GuildAtkDefBatBattlePanelWin>().Forget();
|
});
|
|
// 己方公会徽章点击 - 自己的公会
|
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()
|
{
|
GlobalTimeEvent.Instance.secondEvent += OnSecondEvent;
|
GuildAtkDefBatManager.Instance.OnUpdateeFamilyActionInfoEvent += OnUpdateeFamilyActionInfoEvent;
|
GuildAtkDefBatManager.Instance.OnUpdateAtkDefBatInfoEvent += OnUpdateAtkDefBatInfoEvent;
|
GuildManager.Instance.OnUpdateViewFamilyInfo += OnUpdateViewFamilyInfo;
|
GuildAtkDefBatManager.Instance.ClearMainRedpoint();
|
Display();
|
}
|
|
protected override void OnPreClose()
|
{
|
GlobalTimeEvent.Instance.secondEvent -= OnSecondEvent;
|
GuildAtkDefBatManager.Instance.OnUpdateeFamilyActionInfoEvent -= OnUpdateeFamilyActionInfoEvent;
|
GuildAtkDefBatManager.Instance.OnUpdateAtkDefBatInfoEvent -= OnUpdateAtkDefBatInfoEvent;
|
GuildManager.Instance.OnUpdateViewFamilyInfo -= OnUpdateViewFamilyInfo;
|
}
|
|
private void OnUpdateViewFamilyInfo(int familyID)
|
{
|
if (!GuildManager.Instance.viewGuildsDict.ContainsKey(familyID))
|
return;
|
|
if (!UIManager.Instance.IsOpened<GuildPreviewWin>())
|
{
|
GuildPreviewWin.SetShowOpearteBtn(false);
|
UIManager.Instance.OpenWindowAsync<GuildPreviewWin>(familyID).Forget();
|
}
|
}
|
|
private void OnUpdateeFamilyActionInfoEvent()
|
{
|
Display();
|
}
|
|
private void OnUpdateAtkDefBatInfoEvent()
|
{
|
Display();
|
}
|
|
private void OnSecondEvent()
|
{
|
DisplayTime();
|
}
|
|
void Display()
|
{
|
DisplayInfo();
|
DisplayCoreMembers();
|
DisplayStateImage();
|
DisplayTime();
|
DisplayButton();
|
}
|
|
void DisplayStateImage()
|
{
|
int displayState = GuildAtkDefBatManager.Instance.GetGuildBattleDisplayState();
|
stateImage.SetSprite(displayState switch
|
{
|
5 => "GuildAtkDefBatState4",
|
_ => $"GuildAtkDefBatState{displayState}"
|
});
|
}
|
|
void DisplayTime()
|
{
|
int displayState = GuildAtkDefBatManager.Instance.GetGuildBattleDisplayState();
|
timeText.text = Language.Get(displayState switch
|
{
|
2 => "GuildAtkDefBat28",
|
3 => "GuildAtkDefBat29",
|
_ => "GuildAtkDefBat30",
|
},
|
UIHelper.AppendColor(TextColType.LightGreen, GuildAtkDefBatManager.Instance.GetGetCountdownToCurrentPeriodEndString()));
|
}
|
|
void DisplayButton()
|
{
|
int displayState = GuildAtkDefBatManager.Instance.GetGuildBattleDisplayState();
|
goButton.SetActive(displayState == 2 || displayState == 3);
|
}
|
|
/// <summary>
|
/// 展示左右两侧核心成员的角色模型+坐骑
|
/// </summary>
|
void DisplayCoreMembers()
|
{
|
int displayState = GuildAtkDefBatManager.Instance.GetGuildBattleDisplayState();
|
|
// displayState == 1 未参战,不显示角色
|
bool showMembers = displayState != 1;
|
|
// 己方成员展示
|
var myMembers = showMembers ? GuildAtkDefBatManager.Instance.GetSortedCoreMembers(true, displayState) : null;
|
DisplayMemberModels(myModels, myMembers);
|
|
// 敌方成员展示
|
var enemyMembers = showMembers ? GuildAtkDefBatManager.Instance.GetSortedCoreMembers(false, displayState) : null;
|
DisplayMemberModels(enemyModels, enemyMembers);
|
}
|
|
/// <summary>
|
/// 将成员数据填充到模型展示Cell中
|
/// </summary>
|
void DisplayMemberModels(GuildAtkDefBatPlayerShowCell[] models, List<HA525_tagSCFamilyAtkDefBatInfo.tagSCFamilyAtkDefBatMem> members)
|
{
|
if (members == null || members.Count <= 0)
|
{
|
for (int i = 0; i < models.Length; i++)
|
models[i].SetActive(false);
|
return;
|
}
|
|
for (int i = 0; i < models.Length; i++)
|
{
|
if (i < members.Count)
|
{
|
models[i].SetActive(true);
|
var mem = members[i];
|
|
// 解析外观数据
|
int heroSkinID = ResolveHeroSkinID((int)mem.ModelMark, (int)mem.Job);
|
int horseSkinID = HorseManager.Instance.GetOtherPlayerHorseSkinID((int)mem.EquipShowSwitch);
|
|
models[i].Display(heroSkinID, horseSkinID, (int)mem.PlayerID, (int)mem.ServerID, false);
|
}
|
else
|
{
|
models[i].SetActive(false);
|
}
|
}
|
}
|
|
/// <summary>
|
/// 根据 ModelMark 和 Job 解析英雄皮肤ID
|
/// </summary>
|
int ResolveHeroSkinID(int modelMark, int job)
|
{
|
if (modelMark == 0)
|
{
|
PhantasmPavilionManager.Instance.TryGetDefaultID(PhantasmPavilionType.Model, job, out modelMark);
|
}
|
|
if (!ModelConfig.HasKey(modelMark))
|
return 0;
|
|
var modelConfig = ModelConfig.Get(modelMark);
|
return modelConfig.SkinID;
|
}
|
|
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(), !enemyName.IsNullOrEmpty() ? 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);
|
|
bool isShowJoinConditionRect = displayState == 1 || displayState == 4 || displayState == 5;
|
joinConditionRect.SetActive(isShowJoinConditionRect);
|
if (isShowJoinConditionRect)
|
{
|
int prepareMemberLimit = GuildAtkDefBatManager.Instance.prepareMemberLimit;
|
int myGuildMemberCnt = PlayerDatas.Instance.fairyData?.fairy?.MemberCount ?? 0;
|
joinCntText.text = Language.Get("GuildAtkDefBat32", UIHelper.AppendColor(myGuildMemberCnt >= prepareMemberLimit ? TextColType.LightGreen : TextColType.Red, myGuildMemberCnt.ToString()), prepareMemberLimit);
|
|
int prepareActiveLimit = GuildAtkDefBatManager.Instance.prepareActiveLimit;
|
long nowActivityLevel = GuildAtkDefBatManager.Instance.GetMyActivityLevel();
|
activityLevelText.text = Language.Get("GuildAtkDefBat33", UIHelper.AppendColor(nowActivityLevel >= prepareActiveLimit ? TextColType.LightGreen : TextColType.Red, nowActivityLevel.ToString()), prepareActiveLimit);
|
}
|
|
bool isShowResult = displayState == 4 || displayState == 5;
|
myLightImage.SetActive(isShowResult);
|
enemyLightImage.SetActive(isShowResult);
|
myLightImage.SetSprite(displayState == 4 ? "GuildAtkDefBatLightVictory" : "GuildAtkDefBatLightFail");
|
enemyLightImage.SetSprite(displayState == 4 ? "GuildAtkDefBatLightFail" : "GuildAtkDefBatLightVictory");
|
myTextImage.SetSprite(displayState == 4 ? "GuildAtkDefBatTextVictory" : "GuildAtkDefBatTextFail");
|
enemyTextImage.SetSprite(displayState == 4 ? "GuildAtkDefBatTextFail" : "GuildAtkDefBatTextVictory");
|
}
|
|
}
|