zxl
/
CTT
forked from Cal/CTT
1
0
Fork 0
CTT/Unity/Assets/HotfixView/UI/FriendUI/FamilyBossUI.cs

251 lines
8.7 KiB
C#
Raw Normal View History

2021-04-08 20:09:59 +08:00
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()
{
2021-04-11 19:50:39 +08:00
M2C_GetFamilyBossInfo ret = await SessionComponent.Instance.Call<M2C_GetFamilyBossInfo>(new C2M_GetFamilyBossInfo { });
2021-04-08 20:09:59 +08:00
if (!ret.Message.IsNullOrEmpty())
{
TipHelper.OpenUI(ret.Message);
return;
}
var list = ret.BossInfoList;
ui.m_bossList.ClearSelection();
ui.m_bossList.RemoveChildrenToPool();
2021-04-11 19:50:39 +08:00
foreach (BossInfo bossInfo in list)
2021-04-08 20:09:59 +08:00
{
2021-04-11 19:50:39 +08:00
GObject item = ui.m_bossList.AddItemFromPool();
2021-04-08 20:09:59 +08:00
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() =>
{
2021-04-11 19:50:39 +08:00
M2C_GetFamilyBossReward rewardRet = await SessionComponent.Instance.Call<M2C_GetFamilyBossReward>(new C2M_GetFamilyBossReward { BossId = currBossIndex});
2021-04-08 20:09:59 +08:00
if (!rewardRet.Message.IsNullOrEmpty())
{
TipHelper.OpenUI(rewardRet.Message);
return;
}
string rewardTip = null;
2021-04-11 19:50:39 +08:00
foreach (ItemInfo rewardItem in rewardRet.ItemList)
2021-04-08 20:09:59 +08:00
{
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;
}
2021-04-11 19:50:39 +08:00
M2C_StartFamilyBossFight ret = await SessionComponent.Instance.Call<M2C_StartFamilyBossFight>(new C2M_StartFamilyBossFight { BossId = currBossIndex });
2021-04-08 20:09:59 +08:00
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;
}
2021-04-11 19:50:39 +08:00
M2C_GetBossDamageMap ret = await SessionComponent.Instance.Call<M2C_GetBossDamageMap>(new C2M_GetBossDamageMap { BossId = currBossIndex });
2021-04-08 20:09:59 +08:00
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();
2021-04-11 19:50:39 +08:00
foreach (BossDamageMap item in ret.RankList)
2021-04-08 20:09:59 +08:00
{
2021-04-11 19:50:39 +08:00
BossDamageInfo info =GetInfos(item);
2021-04-08 20:09:59 +08:00
rankListDic[currBossIndex - 1].Add(info);
}
}
LoadRankInfo();
}
private BossDamageInfo GetInfos(BossDamageMap bossDamageMap)
{
int treat = 0;
2021-04-11 19:50:39 +08:00
foreach (BossDamagePerMemberMap info in bossDamageMap.DamageList)
2021-04-08 20:09:59 +08:00
{
treat += info.Treat;
}
BossDamageInfo bossInfo = new BossDamageInfo(bossDamageMap.TotalDamage, treat);
2021-04-11 19:50:39 +08:00
foreach (BossDamagePerMemberMap info in bossDamageMap.DamageList)
2021-04-08 20:09:59 +08:00
{
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];
2021-04-11 19:50:39 +08:00
foreach (BossDamageInfo.BossDamageMemberInfo info in bossDamageMap.list)
2021-04-08 20:09:59 +08:00
{
2021-04-11 19:50:39 +08:00
GObject item = ui.m_rankList.AddItemFromPool();
2021-04-08 20:09:59 +08:00
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;
}
}
}