using System; using System.Threading.Tasks; using asap.core; using game; using GameCore; using UnityEngine; using UnityEngine.UI; using EventPartnerGatherRequests; using System.Linq; public class EventPartnerStatueEntranceBtn : EventButtonResource { [SerializeField] private Image icon; [SerializeField] private BingoTimer timer; [SerializeField] private Button btn; [SerializeField] private GameObject fxRedPointScore, goRedPointInvitation; private EventPartnerStatueEntranceData _data; private void Awake() { var arc = GContext.container.Resolve(); if (arc == null || !arc.IsActive) { gameObject.SetActive(false); return; } CheckResource(arc.TableContext.GetAddressableArray()); btn.onClick.AddListener(OnClickEnter); arc.RtSystem.Subscribe(OnScore, OnPartnerChange); } protected override void OnDestroy() { var arc = GContext.container.Resolve(); arc?.RtSystem?.Unsubscribe(); base.OnDestroy(); } private async void OnClickEnter() { var arc = GContext.container.Resolve(); try { var detailRes = await RefreshDetail(); if (!detailRes) { ToastPanel.Show(LocalizationMgr.GetText("UI_ToastPanel_107")); return; } bool isReady = await GContext.container.Resolve().Loads(arc.TableContext.GetAddressableArray()); if (isReady) { GContext.Publish(new UnloadActToNextAct { actId = arc.TableContext.GetActUrl(), TransitionPanel = UITypes.CloudTransitionPanel }); } else { var panel = await UIManager.Instance.ShowUI(UITypes.CloudTransitionPanel); panel.GetComponent() .SetBtn(true, () => GContext.Publish(new UnloadActToNextAct(arc.TableContext.GetActUrl()))); } } catch (Exception e) { Debug.LogError(e); } } protected override void OnLoadEventResource() { var arc = GContext.container.Resolve(); _data = arc.GetEntranceData(); GContext.container.Resolve().SetImageSprite(icon, _data.IconUrl); timer.Init(_data.TimerContext); timer.OnExpire += () => gameObject.SetActive(false); gameObject.SetActive(true); var data = GContext.container.Resolve(); var context = GContext.container.Resolve(); var hasPendingScore = (data.PendingScoreUiCount > 0 && context is EventPartnerStatueTokenExchangeArcContext); if (!hasPendingScore) { if (_data.TicketCount > 0) RedPointManager.Instance.SetRedPointState(arc.GetRedPointKey(), true, _data.TicketCount); else RedPointManager.Instance.SetRedPointState(arc.GetRedPointKey(), false); } UpdateSpecialRedPoints(); } private async Task RefreshDetail() { var arc = GContext.container.Resolve(); if (!arc.DoRefreshDetail) return true; var res = await arc.Requests.GetDetail(); if (res == null) return false; var pfData = EventPartnerStatuePlayfabData.Load(); arc.ResolveWithDetail(res, pfData); return true; } private async void OnScore(EventPartnerGatherScoreEvt e) { await Awaiters.NextFrame; Debug.Log($"[EventPartnerStatue] EntranceBtn OnScore: {e.Score}"); var arc = GContext.container.Resolve(); var c = arc.Model.ComponentList.FirstOrDefault(x => x.PartnerId == e.PartnerId); if (c == null) return; var oldStage = arc.TableContext.GetStageFromTotalScore(c.ScoreDisplayTotal); arc.OnScore(e); UpdateSpecialRedPoints(); } private async void OnPartnerChange(EventPartnerGatherPartnerEvt e) { await Awaiters.NextFrame; Debug.Log($"[EventPartnerStatue] EntranceBtn PartnerChange: {e.PartnerInfo.PlayFabId}"); var arc = GContext.container.Resolve(); arc.OnPartnerChange(e); UpdateSpecialRedPoints(); } private void UpdateSpecialRedPoints() { var arc = GContext.container.Resolve(); _data = arc.GetEntranceData(); goRedPointInvitation.SetActive(_data.HasInvitation); fxRedPointScore.SetActive(_data.HasPartnerScore); } }