using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using UnityEngine;
|
using UnityEngine.UI;
|
|
//带有多个物品的操作提示
|
public class HeroRebornWin : UIBase
|
{
|
[SerializeField] Text m_Info2; //物品列表下方提示
|
[SerializeField] ScrollerController m_Scroller;
|
[SerializeField] Button m_ConfirmBtn;
|
[SerializeField] Button m_CancleBtn;
|
[SerializeField] Transform moneyObj;
|
[SerializeField] Text moneyText;
|
[SerializeField] Image moneyIcon;
|
|
[SerializeField] Toggle lvToggle;
|
[SerializeField] Toggle breakToggle;
|
[SerializeField] Toggle awakeToggle;
|
|
|
#region Built-in
|
|
string replaceItemName;
|
int costCnt;
|
List<Item> items = new List<Item>();
|
|
protected override void InitComponent()
|
{
|
m_ConfirmBtn.AddListener(ConfirmBtn);
|
m_CancleBtn.AddListener(() =>
|
{
|
CloseWindow();
|
});
|
lvToggle.onValueChanged.AddListener((bool isOn) =>
|
{
|
var hero = HeroManager.Instance.GetHero(HeroUIManager.Instance.selectRebornHeroGuid);
|
if (hero == null)
|
{
|
return;
|
}
|
Display(hero);
|
if (lvToggle.isOn == true)
|
{
|
breakToggle.isOn = true;
|
}
|
});
|
|
breakToggle.onValueChanged.AddListener((bool isOn) =>
|
{
|
var hero = HeroManager.Instance.GetHero(HeroUIManager.Instance.selectRebornHeroGuid);
|
if (hero == null)
|
{
|
return;
|
}
|
Display(hero);
|
if (!breakToggle.isOn)
|
{
|
lvToggle.isOn = false;
|
}
|
});
|
|
awakeToggle.onValueChanged.AddListener((bool isOn) =>
|
{
|
var hero = HeroManager.Instance.GetHero(HeroUIManager.Instance.selectRebornHeroGuid);
|
if (hero == null)
|
{
|
return;
|
}
|
Display(hero);
|
});
|
|
lvToggle.isOn = true;
|
breakToggle.isOn = true;
|
}
|
|
protected override void OnPreOpen()
|
{
|
m_Scroller.OnRefreshCell += OnRefreshCell;
|
var hero = HeroManager.Instance.GetHero(HeroUIManager.Instance.selectRebornHeroGuid);
|
if (hero == null)
|
{
|
return;
|
}
|
Display(hero);
|
|
}
|
|
|
protected override void OnPreClose()
|
{
|
m_Scroller.OnRefreshCell -= OnRefreshCell;
|
|
}
|
|
#endregion
|
|
|
void Display(HeroInfo hero)
|
{
|
items.Clear();
|
replaceItemName = $"( {HeroUIManager.Instance.rebornPayBackPer}% )";
|
|
costCnt = 0;
|
Dictionary<string, double> rebornParam = new Dictionary<string, double>(); //重生消耗公式参数
|
|
var payBack1 = new Dictionary<int, long>();
|
|
|
|
if (lvToggle.isOn)
|
{
|
payBack1 = HeroUIManager.Instance.GetHeroLVPayBack(hero.Quality, hero.heroLevel);
|
//先计算有没消耗
|
rebornParam.Add("heroLV", hero.heroLevel);
|
costCnt = (int)JaceCalculator.Calculate(HeroUIManager.Instance.rebornFormula, rebornParam);
|
}
|
|
if (breakToggle.isOn)
|
{
|
payBack1 = CommonFunc.AddDict(payBack1, HeroUIManager.Instance.GetHeroBreakPayBack(hero.Quality, hero.breakLevel));
|
rebornParam.Clear();
|
//先计算有没消耗
|
rebornParam.Add("breakLV", hero.breakLevel);
|
costCnt += (int)JaceCalculator.Calculate(HeroUIManager.Instance.rebornBreakFormula, rebornParam);
|
}
|
|
|
|
//重生等级重置的消耗,参数 heroLV武将等级,最终消耗为公式+觉醒消耗
|
if (hero.awakeLevel == 0)
|
{
|
awakeToggle.isOn = false;
|
awakeToggle.SetActive(false);
|
m_Info2.SetActive(false);
|
|
}
|
else
|
{
|
|
awakeToggle.SetActive(true);
|
if (awakeToggle.isOn)
|
{
|
payBack1 = CommonFunc.AddDict(payBack1, HeroUIManager.Instance.GetHeroQualityAwakePayBack(hero.Quality, hero.awakeLevel));
|
costCnt += HeroQualityAwakeConfig.GetQualityAwakeConfig(hero.Quality, hero.awakeLevel).RebirthCostMoney;
|
}
|
m_Info2.SetActive(true);
|
m_Info2.text = Language.Get("herocard44", HeroUIManager.Instance.rebornAwakeHeroMaxCount - HeroUIManager.Instance.awakeRebirthCnt);
|
}
|
|
//计算返还比例
|
var _list = payBack1.Keys.ToList();
|
foreach (var key in _list)
|
{
|
payBack1[key] = Math.Max((long)(payBack1[key] * HeroUIManager.Instance.rebornPayBackPer / 100.0), 1);
|
}
|
|
items = CommonFunc.ChangeToItemList(payBack1);
|
if (costCnt == 0)
|
{
|
moneyObj.SetActive(false);
|
}
|
else
|
{
|
moneyObj.SetActive(true);
|
moneyText.text = UIHelper.ShowUseMoney(HeroUIManager.Instance.payBackMoneyType, costCnt);
|
moneyIcon.SetIconWithMoneyType(HeroUIManager.Instance.payBackMoneyType);
|
}
|
|
if (!lvToggle.isOn && !breakToggle.isOn && !awakeToggle.isOn)
|
{
|
m_Scroller.SetActive(false);
|
}
|
else
|
{
|
m_Scroller.SetActive(true);
|
m_Scroller.Refresh();
|
for (int i = 0; i < items.Count; i++)
|
{
|
m_Scroller.AddCell(ScrollerDataType.Header, i);
|
}
|
m_Scroller.Restart();
|
}
|
|
}
|
|
|
|
private void ConfirmBtn()
|
{
|
if (awakeToggle.isOn && HeroUIManager.Instance.awakeRebirthCnt >= HeroUIManager.Instance.rebornAwakeHeroMaxCount)
|
{
|
SysNotifyMgr.Instance.ShowTip("HeroRebornAwakeMax");
|
return;
|
}
|
if (!lvToggle.isOn && !breakToggle.isOn && !awakeToggle.isOn)
|
{
|
SysNotifyMgr.Instance.ShowTip("HeroReborn4");
|
return;
|
}
|
|
if (UIHelper.GetMoneyCnt(HeroUIManager.Instance.payBackMoneyType) < costCnt)
|
{
|
ItemTipUtility.ShowMoneyTip(HeroUIManager.Instance.payBackMoneyType);
|
return;
|
}
|
var hero = HeroManager.Instance.GetHero(HeroUIManager.Instance.selectRebornHeroGuid);
|
if (hero == null)
|
{
|
return;
|
}
|
HeroUIManager.Instance.SendReborn(hero, lvToggle.isOn, breakToggle.isOn, awakeToggle.isOn);
|
CloseWindow();
|
}
|
|
|
void OnRefreshCell(ScrollerDataType type, CellView cell)
|
{
|
var _cell = cell as HeroRebornCell;
|
_cell?.Display(cell.index, replaceItemName, items);
|
}
|
|
|
}
|
|
|
|
|
|