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

253 lines
8.8 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>>();
private Scene zoneScene;
public void Awake()
{
zoneScene = this.ZoneScene();
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()
{
M2C_GetFamilyBossInfo ret = await zoneScene.GetComponent<SessionComponent>().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 (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 zoneScene.GetComponent<SessionComponent>().Call<M2C_GetFamilyBossReward>(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 zoneScene.GetComponent<SessionComponent>().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;
}
M2C_GetBossDamageMap ret = await zoneScene.GetComponent<SessionComponent>().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 (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;
}
}
}