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;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|