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 items = new List(); 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 rebornParam = new Dictionary(); //重生消耗公式参数 var payBack1 = new Dictionary(); 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); } }