using System.Collections.Generic; using UnityEngine; using System.Linq; using asap.core; using DataCenter; using GameCore; using TMPro; using UnityEditor; using UnityEngine.UI; namespace UI.OfferDiscoParty { internal class UIElement { public RewardItemNew Reward; public TMP_Text TextProbability; } public class OfferDiscoRewardsPopupPanel : MonoBehaviour { private const int MaxElem = 12; private OfferDiscoPartyManager _manager; private TMP_Text _textInfo; private TMP_Text _textTitle; private readonly UIElement[] _uiElements = new UIElement[MaxElem]; // // private List _itemDataList = new (); private struct WeightItemData { public ItemData ItemData; public float Weight; } private readonly List _weightItemDataList = new(); #region 生命周期 private void Awake() { _manager = GContext.container.Resolve(); _textInfo = transform.Find("root/text_info").GetComponent(); _textTitle = transform.Find("root/text_title").GetComponent(); for (var i = 0; i < MaxElem; ++i) { var fixIdx = i + 1; _uiElements[i] = new UIElement { Reward = transform.Find($"root/layout/reward_{fixIdx}/reward").GetComponent(), TextProbability = transform.Find($"root/layout/reward_{fixIdx}/text_probability").GetComponent(), }; } } private void Start() { var items = _manager.OfferDiscoPartyData.Items; _weightItemDataList.Clear(); foreach (var item in items) { _weightItemDataList.Add(new WeightItemData { ItemData = new ItemData { id = item.Item, count = item.Number, }, Weight = item.Status == TItemStatues.Done ? 1000 : _manager.GetProbability(item.Id), }); } _weightItemDataList.Sort((p1, p2) => p1.Weight.CompareTo(p2.Weight)); Log($"_weightItemDataList -> {string.Join(',', _weightItemDataList)}"); var playerItemData = GContext.container.Resolve(); for (var i = 0; i < MaxElem; ++i) { var weightItemData = _weightItemDataList[i]; if (weightItemData.ItemData.id == 1001) { //膨胀体力 playerItemData.ItemInflation(weightItemData.ItemData, null); } _uiElements[i].Reward.SetData(weightItemData.ItemData); _uiElements[i].TextProbability.text = weightItemData.Weight >= 1000 ? "" : $"{weightItemData.Weight}%"; _uiElements[i].Reward.SetReceived(weightItemData.Weight >= 1000); } } #endregion #region Log private void Log(string t) { Debug.Log($"OfferChainsInfoPanel ->{t}"); } #endregion } }