using asap.core; using DG.Tweening; using GameCore; using System.Collections; using System.Collections.Generic; using System.Threading.Tasks; using UniRx; using UnityEngine; using UnityEngine.UI; //奖励不叠加,Grip展示 public class FishingBoxRewardPanel : BasePanel { [SerializeField] private RewardItemNew rewardItem; [SerializeField] private Transform tran_rewardParent; [SerializeField] private GameObject go_row; [SerializeField] private PanelScroll ps; private FishingBoxDataProvier dataProvider; [SerializeField] private Button btn_close, btn_skip; private List rewards = new(); private List rows = new(); public bool IsShow; private void Awake() { btn_close.OnClickAsObservable().Subscribe(x => OnClose()).AddTo(disposables); btn_skip.onClick.AddListener(OnClick); } public async Task InitAsync(List dropItems) { var x = 4; clickCount = 0; jump = false; IsShow = true; gameObject.SetActive(true); var curParent = tran_rewardParent; btn_skip.gameObject.SetActive(true); btn_close.gameObject.SetActive(false); dataProvider = GContext.container.Resolve(); dataProvider.CanSwitchBox = false; for (int i = 0; i < dropItems.Count; i++) { var index = i % 4; if (index == 0) { curParent = Instantiate(go_row, tran_rewardParent).transform; curParent.gameObject.SetActive(true); rows.Add(curParent.gameObject); var count = dropItems.Count - i; for (int j = 0; j < x; j++) { curParent.GetChild(j).gameObject.SetActive(j < count); } } var item = dropItems[i]; var reward = Instantiate(rewardItem.gameObject, curParent.GetChild(index)).GetComponent(); reward.SetData(item, isCanClick: true); reward.gameObject.SetActive(true); reward.PlayOpen(); rewards.Add(reward); if (jump) { } else { // if ( index == 0 && i/ 4 > 3 && i!= rewards.Count ) // { // // } await Awaiters.NextFrame; ps.verticalNormalizedPosition = 0f; await new WaitForSeconds(0.1f); } } await Awaiters.NextFrame; ps.verticalNormalizedPosition = 0f; btn_skip.gameObject.SetActive(false); btn_close.gameObject.SetActive(true); } private int clickCount; private bool jump; private void OnClick() { if (IsShow) { clickCount++; if (clickCount == 2) { jump = true; } } } private void OnClose() { rewards.ForEach(x => Destroy(x.gameObject)); rows.ForEach(x => Destroy(x.gameObject)); rewards.Clear(); rows.Clear(); IsShow = false; gameObject.SetActive(false); dataProvider.CanSwitchBox = true; } }