using System;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.UI;
///
/// 武将遣散界面
///
public class HeroDeleteWin : UIBase
{
[SerializeField] Button storeBtn;
[SerializeField] ScrollerController scroller;
[SerializeField] HeroSelectBehaviour heroSelectBehaviour;
[SerializeField] GameObject noHeroObj;
[SerializeField] Button quickSelectBtn;
[SerializeField] Button deleteBtn;
protected override void InitComponent()
{
storeBtn.AddListener(() =>
{
// UIManager.Instance.OpenWindow();
});
quickSelectBtn.AddListener(QuickSelect);
deleteBtn.AddListener(DeleteHero);
}
protected override void OnPreOpen()
{
scroller.OnRefreshCell += OnRefreshCell;
TeamManager.Instance.OnTeamChange += OnTeamChange;
PackManager.Instance.RefreshItemLockEvent += RefreshItemLockEvent;
ItemLogicUtility.Instance.OnGetItemShowEvent += OnGetItemShowEvent;
HeroUIManager.Instance.selectHeroDeleteListJob = 0;
HeroUIManager.Instance.selectHeroDeleteListCountry = 0;
HeroUIManager.Instance.SortHeroDeleteList();
heroSelectBehaviour.Display(0, HeroUIManager.Instance.selectHeroDeleteListJob, HeroUIManager.Instance.selectHeroDeleteListCountry, SelectJobCountry);
RefreshEmptyTip();
CreateScroller();
}
protected override void OnPreClose()
{
scroller.OnRefreshCell -= OnRefreshCell;
TeamManager.Instance.OnTeamChange -= OnTeamChange;
PackManager.Instance.RefreshItemLockEvent -= RefreshItemLockEvent;
ItemLogicUtility.Instance.OnGetItemShowEvent -= OnGetItemShowEvent;
HeroUIManager.Instance.selectDeleteHeroList.Clear();
}
void CreateScroller()
{
scroller.Refresh();
for (int i = 0; i < HeroUIManager.Instance.heroDeleteSortList.Count; i++)
{
if (i % 5 == 0)
{
scroller.AddCell(ScrollerDataType.Header, i);
}
}
scroller.Restart();
}
void OnRefreshCell(ScrollerDataType type, CellView cell)
{
var _cell = cell as HeroDeleteLineCell;
_cell.Display(cell.index);
}
void SelectJobCountry(int job, int country)
{
HeroUIManager.Instance.selectHeroDeleteListJob = job;
HeroUIManager.Instance.selectHeroDeleteListCountry = country;
HeroUIManager.Instance.SortHeroDeleteList();
CreateScroller();
RefreshEmptyTip();
}
void RefreshEmptyTip()
{
if (HeroUIManager.Instance.heroDeleteSortList.Count <= 0)
{
noHeroObj.SetActive(true);
scroller.SetActive(false);
}
else
{
noHeroObj.SetActive(false);
scroller.SetActive(true);
}
}
void OnTeamChange(TeamType type)
{
scroller.m_Scorller.RefreshActiveCellViews();
}
void RefreshItemLockEvent(PackType type, string guid, bool lockState)
{
scroller.m_Scorller.RefreshActiveCellViews();
}
void QuickSelect()
{
//只选精英
for (int i = 0; i < HeroUIManager.Instance.heroDeleteSortList.Count; i++)
{
HeroInfo hero = HeroManager.Instance.GetHero(HeroUIManager.Instance.heroDeleteSortList[i]);
if (hero == null)
continue;
if (hero.Quality > 2)
continue;
if (hero.awakeLevel > 0)
continue;
if (hero.isLock)
continue;
if (hero.IsInAnyTeam())
continue;
if (HeroUIManager.Instance.selectDeleteHeroList.Contains(hero.itemHero.guid))
continue;
HeroUIManager.Instance.selectDeleteHeroList.Add(hero.itemHero.guid);
}
if (HeroUIManager.Instance.selectDeleteHeroList.Count == 0)
{
SysNotifyMgr.Instance.ShowTip("HeroReborn2");
return;
}
scroller.m_Scorller.RefreshActiveCellViews();
}
void DeleteHero()
{
if (HeroUIManager.Instance.selectDeleteHeroList.Count == 0)
{
SysNotifyMgr.Instance.ShowTip("HeroReborn3");
return;
}
bool hasStarHero = false;
for (int i = 0; i < HeroUIManager.Instance.selectDeleteHeroList.Count; i++)
{
HeroInfo hero = HeroManager.Instance.GetHero(HeroUIManager.Instance.selectDeleteHeroList[i]);
if (hero == null)
continue;
if (hero.heroStarMaxBefore > 1)
{
hasStarHero = true;
break;
}
}
if (hasStarHero)
{
ConfirmCancel.ShowPopConfirm(Language.Get("Mail101"), Language.Get("herocard67"), (bool isOK) =>
{
if (isOK)
{
ShowDeleteItems();
}
});
return;
}
ShowDeleteItems();
}
void ShowDeleteItems()
{
Dictionary allItemDict = new Dictionary();
for (int i = 0; i < HeroUIManager.Instance.selectDeleteHeroList.Count; i++)
{
HeroInfo hero = HeroManager.Instance.GetHero(HeroUIManager.Instance.selectDeleteHeroList[i]);
if (hero == null)
continue;
allItemDict = CommonFunc.AddDict(allItemDict, CommonFunc.AddDict(HeroUIManager.Instance.GetHeroLVPayBack(hero.Quality, hero.heroLevel),
HeroUIManager.Instance.GetHeroBreakPayBack(hero.Quality, hero.breakLevel)));
Dictionary tmpDict = new Dictionary();
foreach (var itemInfo in hero.qualityConfig.DismissReturnItems)
{
if (!tmpDict.ContainsKey(itemInfo[0]))
{
tmpDict.Add(itemInfo[0], itemInfo[1] * (1 + hero.heroStarMaxBefore));
}
else
{
tmpDict[itemInfo[0]] += itemInfo[1] * (1 + hero.heroStarMaxBefore);
}
}
allItemDict = CommonFunc.AddDict(allItemDict, tmpDict);
}
//计算返还比例
var _list = allItemDict.Keys.ToList();
foreach (var key in _list)
{
allItemDict[key] = Math.Max((long)(allItemDict[key] * HeroUIManager.Instance.deletePayBackPer / 100.0), 1);
}
List- items = CommonFunc.ChangeToItemList(allItemDict);
ConfirmCancel.ShowItemsConfirm(items, Language.Get("herocard25"), Language.Get("herocard26"), (bool isOk) =>
{
if (isOk)
{
//发包
var pack = new CB240_tagCSHeroDismiss();
List indexList = new List();
for (int i = 0; i < HeroUIManager.Instance.selectDeleteHeroList.Count; i++)
{
indexList.Add((ushort)HeroManager.Instance.GetHero(HeroUIManager.Instance.selectDeleteHeroList[i]).itemHero.gridIndex);
}
pack.ItemIndexList = indexList.ToArray();
pack.Count = (ushort)pack.ItemIndexList.Length;
GameNetSystem.Instance.SendInfo(pack);
HeroUIManager.Instance.selectDeleteHeroList.Clear();
}
}, itemName:$"( {HeroUIManager.Instance.deletePayBackPer}% )");
}
void OnGetItemShowEvent()
{
HeroUIManager.Instance.SortHeroDeleteList();
CreateScroller();
}
}