using asap.core; using TMPro; using UnityEngine; using UnityEngine.UI; using UniRx; using GameCore; using game; using static EventPartnerData; using System.Collections.Generic; public class EventPartnerEntryButton : EventButtonResource { [SerializeField] private TMP_Text _textTimer; [SerializeField] private Button _btn; [SerializeField] CanvasGroup _homeCanvasGroup; [SerializeField] private Image icon; private readonly IUserService _userService = GContext.container.Resolve(); private void Awake() { // Debug.Log($"[EventPartner] Icon Awake"); GContext.OnEvent().Subscribe(_ => OnDataLoaded()).AddTo(this); } private void OnEnable() { var _data = GContext.container.Resolve(); // _data.LogActivation(); //var manager = GContext.container.Resolve(Partainer)? if (!_data.IsEventActivated) { gameObject.SetActive(false); return; } _textTimer.text = ConvertTools.ConvertTime2(_data.RemainingTime); RedPointManager.Instance.SetRedPointState("Home.Fishbowl", _data.DoNeedRedPoint); Observable.Interval(System.TimeSpan.FromSeconds(1.0f)).Subscribe(_ => { _textTimer.text = ConvertTools.ConvertTime2(_data.RemainingTime); RedPointManager.Instance.SetRedPointState("Home.Fishbowl", _data.DoNeedRedPoint); if (_data.RemainingTime.TotalSeconds <= 0) gameObject.SetActive(false); }).AddTo(this); // Debug.Log($"icon: {_data.Icon}"); CheckResource(new List() { "EventPartnerCommonPrefabs", _data.AddressableLabel, _data.Icon }); } private void Start() { _btn.onClick.AddListener(() => EnterEventPartnerAct()); } private async void EnterEventPartnerAct() { try { var _data = GContext.container.Resolve(); _homeCanvasGroup.blocksRaycasts = false; var isWithinCoolDown = _data.LastDetailRequestFromEntranceButton != null && ZZTimeHelper.UtcNow() - _data.LastDetailRequestFromEntranceButton <= System.TimeSpan.FromSeconds(15); if (!_data.IsWhole || !isWithinCoolDown) { _data.LastDetailRequestFromEntranceButton = ZZTimeHelper.UtcNow(); var dataRes = await LoadData(); if (!dataRes) { Debug.Log($"[EventPartner] LoadData Failed."); ToastPanel.Show(LocalizationMgr.GetText("UI_ToastPanel_107")); _homeCanvasGroup.blocksRaycasts = true; _data.IsLastTimeDetailRequestFromEntranceButtonValid = false; return; } _data.IsLastTimeDetailRequestFromEntranceButtonValid = true; // else open panel. } else if (!_data.IsLastTimeDetailRequestFromEntranceButtonValid) { Debug.Log($"[EventPartner] Too frequent."); ToastPanel.Show(LocalizationMgr.GetText("UI_ToastPanel_107")); _homeCanvasGroup.blocksRaycasts = true; return; } // Load resource and enter event act _data.SubscribeEvent(); if (await LoadAssetBundle()) GContext.Publish(new UnloadActToNextAct("EventPartnerAct")); else { var panel = await UIManager.Instance.ShowUI(UITypes.CloudTransitionPanel); panel.GetComponent().SetBtn(true, () => GContext.Publish(new UnloadActToNextAct("EventPartnerAct"))); } _homeCanvasGroup.blocksRaycasts = true; } catch (System.Exception e) { Debug.Log($"[EventPartner] EnterActError: {e.Message}\n{e.StackTrace}"); throw; } } private async System.Threading.Tasks.Task LoadData() { var _data = GContext.container.Resolve(); var _playerPreferenceKey = "EventPartnerRecommendCache" + _userService.UserId; //Load Player Preferences var pfString = PlayFabMgr.Instance.GetLocalData(EventPartnerPlayfabData.Key); EventPartnerPlayfabData pfData = EventPartnerPlayfabData.FromString(pfString); Debug.Log($"[EventPartner] Try get response in load data from entrance:"); var detailRequest = new EventBuildDetailRequest() { eventId = _data.EventId }; var response = await GContext.container.Resolve() .EventPartnerRequest(DetailUrl, detailRequest); if (response == null) { Debug.Log($"[EventPartner] No response. "); return false; } Debug.Log($"[EventPartner] Response: {response}"); Debug.Log($"[EventPartner] ResponseState: {response.State}"); Debug.Log($"[EventPartner] ResponseMessage: {response.Message}"); switch (response.State) { case EEventBuildState.Failed: Debug.Log($"[EventPartner] Load data error from server: {response.Message} "); return false; case EEventBuildState.NoActiveEvent: Debug.Log($"[EventPartner] Event partner not active in server: {response.Message}, but this is not supposed to happen any more."); return false; case EEventBuildState.Success: _data.ResolveAllDataButEvent(response, _data.Cache, pfData); return true; default: Debug.Log($"[EventPartner] Unexpected status: {response.State}./nMessage: {response.Message} "); return false; } } private async System.Threading.Tasks.Task LoadAssetBundle() { var _data = GContext.container.Resolve(); var loadResourceService = GContext.container.Resolve(); var isCommentAssetLoaded = await loadResourceService.Load("EventPartnerCommonPrefabs"); var isCurrentAssetLoaded = await loadResourceService.Load(_data.AddressableLabel); return isCommentAssetLoaded && isCurrentAssetLoaded; } private async void OnDataLoaded() { Debug.Log($"[EventPartner]On Loaded."); await Awaiters.NextFrame; //gameObject.SetActive(true); var _data = GContext.container.Resolve(); CheckResource(new List() { "EventPartnerCommonPrefabs", _data.AddressableLabel, _data.Icon }); } protected override void OnLoadEventResource() { var _data = GContext.container.Resolve(); if (_data == null) { Debug.LogError("EventPartnerEntryButton EventPartnerData 为空"); return; } // _data.LogActivation(); if (_data.IsEventActivated) { GContext.container.Resolve().SetImageSprite(icon, _data.Icon); gameObject.SetActive(true); } } } public class EventPartnerDataLoaded { }