using ET; using FairyGUI; using System; using System.Collections.Generic; namespace ET { public class FamilyBossUIAwakeSyatem : AwakeSystem { public override void Awake(FamilyBossUI self) { self.Awake(); } } public class FamilyBossUIDestroySyatem : DestroySystem { public override void Destroy(FamilyBossUI self) { self.Destroy(); } } public class FamilyBossUI : Entity { public struct BossDamageInfo { public int totalDamage; public int totalTreat; public List list; public BossDamageInfo(int totalDamage, int totalTreat) { this.totalDamage = totalDamage; this.totalTreat = totalTreat; this.list = new List(5); } public struct BossDamageMemberInfo { public long Id; public string name; public int damage; public int treat; } } public FUI_FamilyBossUI ui; private int currRank = 1; private int currBossIndex = 1; private Dictionary> rankListDic = new Dictionary>(); public void Awake() { ui = GetParent(); AwakeAsync().Coroutine(); } private async ETVoid AwakeAsync() { ui.m_bossList.selectedIndex = currBossIndex; LoadBossList().Coroutine(); InitRankInfo().Coroutine(); ui.m_bossList.onClickItem.Set(() => { currRank = 1; currBossIndex = ui.m_bossList.selectedIndex + 1; if (!rankListDic.ContainsKey(currBossIndex-1)) InitRankInfo().Coroutine(); else if (rankListDic[currBossIndex - 1].Count == 0) InitRankInfo().Coroutine(); else LoadRankInfo(); }); ui.m_btnPlus.self.onClick.Set(() => { currRank++; if (!rankListDic.TryGetValue(currBossIndex - 1, out var list)) { Log.Error($"dic has not the key = {currBossIndex - 1}"); return; } if (currRank > list.Count) currRank = list.Count; LoadRankInfo(); }); ui.m_btnMinus.self.onClick.Set(() => { currRank--; if (currRank < 1) currRank = 1; LoadRankInfo(); }); ui.m_btnStart.self.onClick.Set(() => { OnStartBossFight().Coroutine(); }); } private async ETVoid LoadBossList() { M2C_GetFamilyBossInfo ret = await SessionComponent.Instance.Call(new C2M_GetFamilyBossInfo { }); if (!ret.Message.IsNullOrEmpty()) { TipHelper.OpenUI(ret.Message); return; } var list = ret.BossInfoList; ui.m_bossList.ClearSelection(); ui.m_bossList.RemoveChildrenToPool(); foreach (BossInfo bossInfo in list) { GObject item = ui.m_bossList.AddItemFromPool(); FUI_ButtonFamilyBossItem itemUI = FUI_ButtonFamilyBossItem.GetFormPool(ui.ZoneScene(), item); itemUI.self.title = $"{bossInfo.Index}阶Boss"; itemUI.m_proHp.self.max = bossInfo.MaxHp; itemUI.m_proHp.self.value = bossInfo.Hp; itemUI.m_btnReceive.visible = bossInfo.HasReward; itemUI.m_btnReceive.onClick.Set(async() => { M2C_GetFamilyBossReward rewardRet = await SessionComponent.Instance.Call(new C2M_GetFamilyBossReward { BossId = currBossIndex}); if (!rewardRet.Message.IsNullOrEmpty()) { TipHelper.OpenUI(rewardRet.Message); return; } string rewardTip = null; foreach (ItemInfo rewardItem in rewardRet.ItemList) { rewardTip+=$"{BagHelper.GetIconName(rewardItem.Id).Item1} X {rewardItem.Count}\n"; } TipHelper.OpenUI(rewardTip); itemUI.m_btnReceive.visible = false; }); } } private async ETVoid OnStartBossFight() { if (currBossIndex == 0) { TipHelper.OpenUI("请选择想要挑战的Boss!"); return; } M2C_StartFamilyBossFight ret = await SessionComponent.Instance.Call(new C2M_StartFamilyBossFight { BossId = currBossIndex }); if (!ret.Message.IsNullOrEmpty()) { TipHelper.OpenUI(ret.Message); return; } CloseFamilyUIAndBossUI(); } private void CloseFamilyUIAndBossUI() { ui.GetComponent().Hide(); if (!(FUIComponent.Instance.Get(FUIPackage.Friend_FriendUI) is FUI_FriendUI friendUI)) { Log.Error($"friendUi is not find"); return; } friendUI.GetComponent().Hide(); } private async ETVoid InitRankInfo() { if (currBossIndex == 0) { TipHelper.OpenUI("请选择想要查看的Boss!"); return; } M2C_GetBossDamageMap ret = await SessionComponent.Instance.Call(new C2M_GetBossDamageMap { BossId = currBossIndex }); if (!ret.Message.IsNullOrEmpty()) { TipHelper.OpenUI(ret.Message); return; } if (ret.RankList.Count != 0) { if (!rankListDic.ContainsKey(currBossIndex - 1)) rankListDic[currBossIndex - 1] = new List(); else rankListDic[currBossIndex - 1].Clear(); foreach (BossDamageMap item in ret.RankList) { BossDamageInfo info =GetInfos(item); rankListDic[currBossIndex - 1].Add(info); } } LoadRankInfo(); } private BossDamageInfo GetInfos(BossDamageMap bossDamageMap) { int treat = 0; foreach (BossDamagePerMemberMap info in bossDamageMap.DamageList) { treat += info.Treat; } BossDamageInfo bossInfo = new BossDamageInfo(bossDamageMap.TotalDamage, treat); foreach (BossDamagePerMemberMap info in bossDamageMap.DamageList) { bossInfo.list.Add(new BossDamageInfo.BossDamageMemberInfo { Id = info.Id, name=info.Name, damage=info.Damage, treat=info.Treat }); } return bossInfo; } private void LoadRankInfo() { ui.m_txtRank.text = "排名:" + currRank; ui.m_rankList.RemoveChildrenToPool(); int index = currRank - 1; if (!rankListDic.TryGetValue(currBossIndex - 1, out var list)) { Log.Error($"dic has not the key = {currBossIndex - 1}"); return; } if (list.Count == 0) return; BossDamageInfo bossDamageMap = list[index]; foreach (BossDamageInfo.BossDamageMemberInfo info in bossDamageMap.list) { GObject item = ui.m_rankList.AddItemFromPool(); FUI_LabelFamilyBattleInfo itemUI = FUI_LabelFamilyBattleInfo.GetFormPool(ui.ZoneScene(), item); itemUI.m_txtName.text = info.name; itemUI.m_proDamage.self.value = info.damage; itemUI.m_proDamage.self.max = bossDamageMap.totalDamage; itemUI.m_proTreat.self.value = info.treat; itemUI.m_proTreat.self.max = bossDamageMap.totalTreat; } } public void Destroy() { foreach (var item in rankListDic) { item.Value.Clear(); } currRank = 1; currBossIndex = 1; } } }