CTT/Unity/Assets/HotfixView/UI/FriendUI/FamilyBossUI.cs

251 lines
8.5 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using ET;
using FairyGUI;
using System;
using System.Collections.Generic;
namespace ET
{
public class FamilyBossUIAwakeSyatem : AwakeSystem<FamilyBossUI>
{
public override void Awake(FamilyBossUI self)
{
self.Awake();
}
}
public class FamilyBossUIDestroySyatem : DestroySystem<FamilyBossUI>
{
public override void Destroy(FamilyBossUI self)
{
self.Destroy();
}
}
public class FamilyBossUI : Entity
{
public struct BossDamageInfo
{
public int totalDamage;
public int totalTreat;
public List<BossDamageMemberInfo> list;
public BossDamageInfo(int totalDamage, int totalTreat)
{
this.totalDamage = totalDamage;
this.totalTreat = totalTreat;
this.list = new List<BossDamageMemberInfo>(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<int, List<BossDamageInfo>> rankListDic = new Dictionary<int, List<BossDamageInfo>>();
public void Awake()
{
ui = GetParent<FUI_FamilyBossUI>();
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()
{
var ret = await SessionComponent.Instance.Call<M2C_GetFamilyBossInfo>(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 (var bossInfo in list)
{
var 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() =>
{
var rewardRet = await SessionComponent.Instance.Call<M2C_GetFamilyBossReward>(new C2M_GetFamilyBossReward { BossId = currBossIndex});
if (!rewardRet.Message.IsNullOrEmpty())
{
TipHelper.OpenUI(rewardRet.Message);
return;
}
string rewardTip = null;
foreach (var 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;
}
var ret = await SessionComponent.Instance.Call<M2C_StartFamilyBossFight>(new C2M_StartFamilyBossFight { BossId = currBossIndex });
if (!ret.Message.IsNullOrEmpty())
{
TipHelper.OpenUI(ret.Message);
return;
}
CloseFamilyUIAndBossUI();
}
private void CloseFamilyUIAndBossUI()
{
ui.GetComponent<FUIWindowComponent>().Hide();
if (!(FUIComponent.Instance.Get(FUIPackage.Friend_FriendUI) is FUI_FriendUI friendUI))
{
Log.Error($"friendUi is not find");
return;
}
friendUI.GetComponent<FUIWindowComponent>().Hide();
}
private async ETVoid InitRankInfo()
{
if (currBossIndex == 0)
{
TipHelper.OpenUI("请选择想要查看的Boss");
return;
}
var ret = await SessionComponent.Instance.Call<M2C_GetBossDamageMap>(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<BossDamageInfo>();
else
rankListDic[currBossIndex - 1].Clear();
foreach (var item in ret.RankList)
{
var info =GetInfos(item);
rankListDic[currBossIndex - 1].Add(info);
}
}
LoadRankInfo();
}
private BossDamageInfo GetInfos(BossDamageMap bossDamageMap)
{
int treat = 0;
foreach (var info in bossDamageMap.DamageList)
{
treat += info.Treat;
}
BossDamageInfo bossInfo = new BossDamageInfo(bossDamageMap.TotalDamage, treat);
foreach (var 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 (var info in bossDamageMap.list)
{
var 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;
}
}
}