using GameCore; using UnityEngine; using UnityEngine.UI; using OfferStoryChain; using asap.core; using UniRx; using game; using System.Threading.Tasks; using System; public class OfferStoryChainMainPanel : MonoBehaviour { [SerializeField] private Button btnClose; [SerializeField] private OfferStoryChainScrollerView scrollerView; [SerializeField] private OfferStoryChainTaskView taskView; [SerializeField] private OfferStoryChainAnimationCtrl spineCtrl; [SerializeField] private BingoTimer timer; [SerializeField] private GameObject fxFinal; [SerializeField] private float jiandaFxDelay = 2.5f; private int _idx; private void Start() { var manager = GContext.container.Resolve(); btnClose.onClick.AddListener(OnClickClose); manager.EventAggregator.GetEvent() .Subscribe(AfterPurchase) .AddTo(this); GContext.OnEvent() .Subscribe(_ => AfterRewardCollection()) .AddTo(this); Init(manager.GetMainPanelData()); fxFinal.SetActive(false); } public void Init(MainPanelData data) { var manager = GContext.container.Resolve(); scrollerView.Init(data.ScrollerItemViewDataList); taskView.SetIcons(data.Progress); taskView.SetReward(data.Reward); spineCtrl.Init(data.SpineBaseName); spineCtrl.PlayIdleAnimation(data.Progress); var timerCtx = manager.GetTimerData(); timerCtx.OnExpire = OnClickClose; timer.Init(timerCtx); } private void OnClickClose() { var manager = GContext.container.Resolve(); manager.EventAggregator.Publish(new OfferStoryChainCloseEvent()); RedPointManager.Instance.SetRedPointState(Manager.RedPointKey, manager.DoNeedRedPoint); UIManager.Instance.DestroyUI(UITypes.OfferStoryChainPanel); } private async void AfterPurchase(OfferStoryChainPurchaseContext ctx) { try { Debug.Log($"[OfferStoryChain] idx main{_idx}"); _idx = ctx.Index; await scrollerView.TickBtnBuy(ctx.Index); GContext.Publish(new ShowData()); } catch (System.Exception e) { Debug.LogError(e); } } private bool _toBeClosed = false; private async void AfterRewardCollection() { var manager = GContext.container.Resolve(); RedPointManager.Instance.SetRedPointState(Manager.RedPointKey, manager.DoNeedRedPoint); if (_toBeClosed) { OnClickClose(); return; } try { var PlayerItemData = GContext.container.Resolve(); await taskView.PlayItemFly(scrollerView.GetItemStartPoint(_idx), _idx); taskView.SetIcons(_idx + 1); await spineCtrl.PlayUpdateAnimation(_idx + 1); if (_idx >= manager.GetMaxProgressInRound() - 1) { await PlayFinishFx(); var dropId = manager.GetFinalRewardDropId(manager.RoundCount); var finalReward = new ShowData(PlayerItemData.GetItemDataByDropIdAndTypeLureInflation(null, dropId)); GContext.Publish(finalReward); GContext.Publish(new ShowData()); _toBeClosed = true; } else { scrollerView.JumpTo(_idx + 1); await scrollerView.PlayUnlockAnimation(_idx + 1); } } catch (System.Exception e) { Debug.LogError(e); } } private async Task PlayFinishFx() { fxFinal.SetActive(false); fxFinal.SetActive(true); await Task.Delay(TimeSpan.FromSeconds(jiandaFxDelay)); } // #region Test // [Header("Test")] // [SerializeField] private int idx; // private void Update() // { // if (Input.GetKeyDown(KeyCode.Space)) // { // scrollerView.JumpTo(idx); // } // } // #endregion }