137 lines
4.7 KiB
C#
137 lines
4.7 KiB
C#
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<EventPartnerStatueArc>();
|
|
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<EventPartnerStatueArc>();
|
|
arc?.RtSystem?.Unsubscribe();
|
|
base.OnDestroy();
|
|
}
|
|
|
|
|
|
private async void OnClickEnter()
|
|
{
|
|
var arc = GContext.container.Resolve<EventPartnerStatueArc>();
|
|
try
|
|
{
|
|
var detailRes = await RefreshDetail();
|
|
if (!detailRes)
|
|
{
|
|
ToastPanel.Show(LocalizationMgr.GetText("UI_ToastPanel_107"));
|
|
return;
|
|
}
|
|
bool isReady = await GContext.container.Resolve<ILoadResourceService>().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<CloudTransitionPanel>()
|
|
.SetBtn(true, () => GContext.Publish(new UnloadActToNextAct(arc.TableContext.GetActUrl())));
|
|
}
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Debug.LogError(e);
|
|
}
|
|
}
|
|
|
|
protected override void OnLoadEventResource()
|
|
{
|
|
var arc = GContext.container.Resolve<EventPartnerStatueArc>();
|
|
_data = arc.GetEntranceData();
|
|
GContext.container.Resolve<IUIService>().SetImageSprite(icon, _data.IconUrl);
|
|
timer.Init(_data.TimerContext);
|
|
timer.OnExpire += () => gameObject.SetActive(false);
|
|
gameObject.SetActive(true);
|
|
|
|
var data = GContext.container.Resolve<EventPartnerStatueTokenExchangeData>();
|
|
var context = GContext.container.Resolve<IEventPartnerTokenExchangeContext>();
|
|
|
|
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<bool> RefreshDetail()
|
|
{
|
|
var arc = GContext.container.Resolve<EventPartnerStatueArc>();
|
|
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<EventPartnerStatueArc>();
|
|
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<EventPartnerStatueArc>();
|
|
arc.OnPartnerChange(e);
|
|
UpdateSpecialRedPoints();
|
|
}
|
|
|
|
private void UpdateSpecialRedPoints()
|
|
{
|
|
var arc = GContext.container.Resolve<EventPartnerStatueArc>();
|
|
_data = arc.GetEntranceData();
|
|
goRedPointInvitation.SetActive(_data.HasInvitation);
|
|
fxRedPointScore.SetActive(_data.HasPartnerScore);
|
|
}
|
|
}
|