using asap.core; using GameCore; using TMPro; using UnityEngine; using UniRx; using UnityEngine.UI; using game; public class EventOfferJourneyPanel : MonoBehaviour { [SerializeField] private AEventOfferJourneyScroller scroller; [SerializeField] private int jumpToProgress; [SerializeField] private RewardItemNew[] grandPrizeView; [SerializeField] private TMP_Text textTicketCount; [SerializeField] private Button btnTip, btnInfo; [SerializeField] private EventOfferJourneyTipView goTip; [SerializeField] private BingoTimer timer; [SerializeField] private CloseSelfPanel closeSelfReference; [SerializeField] private float initialScrollDuration = 0.8f; private int _progress; private string PlayerPreferenceKey => "EventOfferJourneyPop" + GContext.container.Resolve().UserId; private void Start() { var data = GContext.container.Resolve(); var rewardList = data.GetRewardList(); rewardList.Reverse(); var grandPrize = rewardList[0]; var grandRewardItems = GContext.container.Resolve() .GetItemDataByDropIdLureInflation(null, grandPrize.DropId); for (int i = 0; i < grandPrizeView.Length; i++) { if (i >= grandRewardItems.Count) grandPrizeView[i].gameObject.SetActive(false); else { grandPrizeView[i].gameObject.SetActive(true); grandPrizeView[i].SetData(grandRewardItems[i]); } } scroller.Init(rewardList, data.GetStartPosParam()); UpdataTicketCount(); GContext.OnEvent().Subscribe(_ => UpdataTicketCount()).AddTo(this); GContext.OnEvent().Subscribe(_ => RefreshPanel()).AddTo(this); GContext.OnEvent().Subscribe(OnRequestClose).AddTo(this); _progress = data.Progress; btnInfo.onClick.AddListener(OnClickInfo); btnTip.onClick.AddListener(OnClickTip); goTip.gameObject.SetActive(false); timer.Init(data.ToTimerData(closeSelfReference.OnClickClose)); InitSequence(); // if (data is EventOfferJourneyData journeyData) // Debug.Log($"[EventOfferJourneyPanel] On Open, Recorded vipLvl:{journeyData.VipLvlOnTrigger}, actual vipLvl:{GContext.container.Resolve().PriceLv}"); } private void UpdataTicketCount() { var data = GContext.container.Resolve(); var count = data.TicketCount; count = count > 999 ? 999 : count; textTicketCount.text = count.ToString(); } private void RefreshPanel() { try { var data = GContext.container.Resolve(); if (_progress == data.Progress) return; _progress = data.Progress; scroller.JumpTo(_progress); } catch (System.Exception e) { Debug.LogError(e); } } private void Update() { if (Input.GetKeyDown(KeyCode.J)) { scroller.JumpTo(jumpToProgress); } } private async void OnClickInfo() { try { await UIManager.Instance.ShowUINotLoading(UITypes.EventOfferJourneyInfoPanel); } catch (System.Exception e) { Debug.Log($"[EventOfferJourney]{e.Message}\n{e.StackTrace}"); } } private void OnClickTip() { if (goTip == null) return; goTip.gameObject.SetActive(true); } private async void InitSequence() { try { var data = GContext.container.Resolve(); var ppEventId = PlayerPrefs.GetInt(PlayerPreferenceKey); var maxProgress = data.GetRewardList().Count - 1; scroller.JumpTo(_progress, 0.001f); if (ppEventId == data.EventId) { return; } PlayerPrefs.SetInt(PlayerPreferenceKey, data.EventId); PlayerPrefs.Save(); await System.Threading.Tasks.Task.Delay(System.TimeSpan.FromSeconds(0.001f)); scroller.JumpTo(maxProgress, initialScrollDuration); await System.Threading.Tasks.Task.Delay(System.TimeSpan.FromSeconds(initialScrollDuration)); OnClickTip(); } catch (System.Exception e) { Debug.LogError(e); } } private async void OnRequestClose(EventOfferJourneyClosePanel _) { await System.Threading.Tasks.Task.Delay(System.TimeSpan.FromSeconds(0.3f)); closeSelfReference.OnClickClose(); } } public class EventOfferJourneyDisplayEnd { } public class EventOfferJourneyClosePanel { } public class EventOfferJourneyHideEntrance { }