using System.Linq; using UnityEngine; public class HeroReturnStarUpCell : CellView { [SerializeField] ItemCell freeAwardItemCell; [SerializeField] Transform freeAwardHaveTransform;//已领取 [SerializeField] Transform freeAwardCanHaveTransform;//可领取 [SerializeField] Transform upProcssBGTransform; [SerializeField] Transform upProcessTransform; [SerializeField] Transform downProcssBGTransform; [SerializeField] Transform downProcessTransform; [SerializeField] TextEx starCntText; [SerializeField] TextEx limitText; [SerializeField] ButtonEx buyButton; [SerializeField] ImageEx buyImage; [SerializeField] TextEx buyText; [SerializeField] ImageEx rateImage; [SerializeField] TextEx rateText; [SerializeField] ScrollerController scroller; HeroReturnManager manager => HeroReturnManager.Instance; int id; public void Display(int id, CellView cell) { this.id = id; int heroID = cell.info.Value.infoInt1; bool isFrist = cell.info.Value.infoInt2 == 1; bool isEnd = cell.info.Value.infoInt3 == 1; var config = ActHeroAppearStarConfig.Get(id); if (config == null) return; var heroConfig = HeroConfig.Get(heroID); if (heroConfig == null) return; if (config.FreeAwardItemList.IsNullOrEmpty()) return; int ctgId = config.StarGiftCTGID; int awardIndex = config.AwardIndex; if (!manager.TryGetStarUpAwardArr(id, heroID, out int[][] list)) return; if (!RechargeManager.Instance.TryGetOrderInfo(ctgId, out var orderConfig)) return; if (!RechargeManager.Instance.TryGetRechargeCount(ctgId, out var rechargeCount)) return; if (!RechargeManager.Instance.TryGetRechargeItem(ctgId, out var rechargeItemList)) return; CTGConfig ctgConfig = CTGConfig.Get(ctgId); if (ctgConfig == null) return; rateImage.SetActive(true); rateText.text = Language.Get("DailySpecials07", ctgConfig.Percentage); int state = manager.GetStarUpFreeState(id);//0 - 未解锁 1 - 可领取 2 - 已领取 freeAwardHaveTransform.SetActive(state == 2); freeAwardCanHaveTransform.SetActive(state == 1); bool isNoSellOut = manager.IsNoSellOutCTGID(ctgId); buyButton.interactable = state != 0 && isNoSellOut; buyButton.SetListener(() => { if (isNoSellOut && state != 0) { RechargeManager.Instance.CTG(ctgId); } }); //buyImage.gray = state == 0 || !isNoSellOut; buyText.text = !isNoSellOut ? Language.Get("storename11") : Language.Get("PayMoneyNum", UIHelper.GetMoneyFormat(orderConfig.PayRMBNumOnSale)); limitText.text = Language.Get("TimeRush08", UIHelper.AppendColor(rechargeCount.totalCount >= ctgConfig.TotalBuyCount ? TextColType.Red : TextColType.DarkGreen, $"{rechargeCount.totalCount}/{ctgConfig.TotalBuyCount}")); bool isHeroStarOk = manager.IsHeroStarCntOk(heroConfig.HeroID, config.NeedStar) && HeroManager.Instance.HasHero(heroConfig.HeroID) && manager.IsLockStarHero(manager.GetOperationHeroAppearInfo()); upProcssBGTransform.SetActive(!isFrist); downProcssBGTransform.SetActive(!isEnd); upProcessTransform.SetActive(isHeroStarOk); downProcessTransform.SetActive(isHeroStarOk); CreateScroller(list); int[] arr = config.FreeAwardItemList.First(); int itemID = arr[0]; int itemCount = arr[1]; freeAwardItemCell.SetActive(true); freeAwardItemCell.Init(new ItemCellModel(itemID, false, itemCount)); freeAwardItemCell.button.AddListener(() => { if (state == 1) { manager.SendGetStarReward(); } else { ItemTipUtility.Show(itemID); } }); starCntText.text = Language.Get("HeroDebut20", config.NeedStar); } private void CreateScroller(int[][] list) { if (list == null) return; var config = ActHeroAppearStarConfig.Get(id); if (config == null) return; scroller.OnRefreshCell += OnRefreshCell; scroller.Refresh(); for (int i = 0; i < list.Length; i++) { var item = list[i]; var itemID = item[0]; var itemCount = item[1]; CellInfo cellInfo = new() { infoInt1 = itemID, infoInt2 = itemCount, infoInt3 = manager.IsNoSellOutCTGID(config.StarGiftCTGID) ? 1 : 0, }; scroller.AddCell(ScrollerDataType.Header, i, cellInfo); } scroller.Restart(); scroller.OnRefreshCell -= OnRefreshCell; } private void OnRefreshCell(ScrollerDataType type, CellView cell) { var _cell = cell.GetComponent(); _cell?.Display(cell.index, cell); } }