253 lines
8.8 KiB
C#
253 lines
8.8 KiB
C#
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;
|
||
}
|
||
}
|
||
}
|