Files
MinFt/Client/Assets/Scripts/UI/Home/HomeBtnBattlepass.cs
2026-04-27 12:07:32 +08:00

112 lines
4.0 KiB
C#

using asap.core;
using cfg;
using GameCore;
using System;
using System.Collections.Generic;
using TMPro;
using UniRx;
using UnityEngine;
using UnityEngine.UI;
public class HomeBtnBattlepass : EventButtonResource
{
Button btn_battlePass;
TMP_Text txt_battlePassTimer;
TMP_Text text_level;
private CompositeDisposable Disposables = new CompositeDisposable();
private void Awake()
{
text_level = transform.Find("lock/text_level").GetComponent<TMP_Text>();
txt_battlePassTimer = transform.Find("text_time").GetComponent<TMP_Text>();
btn_battlePass = GetComponent<Button>();
if (GContext.container.Resolve<PlayerData>().lv < GContext.container.Resolve<Tables>().TbGlobalConfig.PreviewUnlockLevel)
{
gameObject.SetActive(false);
return;
}
CheckResource(new List<string>() { "BattlePassPanel" });
GContext.OnEvent<TargetEvent>().Where(_ => _.type == 3 && _.subType == 7).Subscribe(OnEvent_TargetEvent).AddTo(Disposables);
}
private void Start()
{
btn_battlePass.onClick.AddListener(OnClickBattlePass);
RefreshBattlePassBtn();
}
IDisposable disposable;
async void OnClickBattlePass()
{
var dataProvider = GContext.container.Resolve<BattlePassDataProvider>();
if (!dataProvider.IsActivating)
{
GameObject panel = await UIManager.Instance.ShowUILoad(new UIType("FeatureUnlockPreviewPopupPanel"));
FeatureUnlockPreviewPopupPanel featureUnlockPreviewPopupPanel = panel.GetComponent<FeatureUnlockPreviewPopupPanel>();
featureUnlockPreviewPopupPanel.InitPanel(1);
return;
}
GameObject go = await UIManager.Instance.ShowUILoad(UITypes.BattlePassPanel);
if (go != null)
{
GContext.Publish(new HideHomePanelEvent());
}
}
void OnEvent_TargetEvent(TargetEvent targetEvent)
{
if (this == null)
{
return;
}
RefreshBattlePassBtn();
}
void RefreshBattlePassBtn()
{
var dataProvider = GContext.container.Resolve<BattlePassDataProvider>();
btn_battlePass.transform.Find("lock").gameObject.SetActive(!dataProvider.IsActivating);
if (!dataProvider.IsActivating)
{
txt_battlePassTimer.gameObject.SetActive(false);
FishingEvent rankEvent = GContext.container.Resolve<FishingEventData>().GetEventeByTimType(3, 7);
if (rankEvent != null)
{
text_level.text = LocalizationMgr.GetFormatTextValue("UI_PlayerGradePopupPanel_1", rankEvent.ConditionList[0].Param[0]);
}
//战令结束
return;
}
disposable?.Dispose();
DateTime curTimer = ZZTimeHelper.UtcNow().UtcNowOffset();
DateTime endTime = GContext.container.Resolve<FishingEventData>().GetEventEndTime(dataProvider.Data.BattlePassRecord.ID);
TimeSpan duration = endTime - curTimer;
dataProvider.CheckIfRefreshDailyTask();
dataProvider.CheckIfRefreshWeekTask();
txt_battlePassTimer.text = ConvertTools.ConvertTime2(duration);
disposable = Observable.Interval(TimeSpan.FromSeconds(1))
.TakeWhile(seconds => seconds < duration.TotalSeconds)
.Subscribe(x =>
{
if (dataProvider.IsActivating)
{
txt_battlePassTimer.text = ConvertTools.ConvertTime2(endTime - ZZTimeHelper.UtcNow().UtcNowOffset());
}
}, RefreshBattlePass);
dataProvider.SetRedPoint();
}
void RefreshBattlePass()
{
disposable?.Dispose();
Disposables?.Dispose();
}
private void OnDisable()
{
RefreshBattlePass();
}
protected override void OnLoadEventResource()
{
if (GContext.container.Resolve<PlayerData>().lv >= GContext.container.Resolve<Tables>().TbGlobalConfig.PreviewUnlockLevel)
{
gameObject.SetActive(true);
}
}
}