181 lines
5.2 KiB
C#
181 lines
5.2 KiB
C#
using asap.core;
|
|
using DG.Tweening;
|
|
using GameCore;
|
|
using System;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using TMPro;
|
|
using UniRx;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
public class BattlePassPanel : BasePanel
|
|
{
|
|
[SerializeField, Range(0f, 2f)]
|
|
private float
|
|
_fillTime,
|
|
_levelUpWaitTime
|
|
;
|
|
BattlePassDataProvider _dataProvider;
|
|
PlayerItemData _playerItemData;
|
|
CancellationTokenSource _tokenSource;
|
|
|
|
[SerializeField, Header("===========")]
|
|
Button btn_close;
|
|
|
|
[SerializeField]
|
|
Toggle
|
|
tog_battlePass,
|
|
tog_task;
|
|
|
|
[SerializeField]
|
|
GameObject
|
|
go_taskBtn,
|
|
go_battlePassBtn;
|
|
|
|
[SerializeField]
|
|
BattlePassRecordPanel recordPanel;
|
|
[SerializeField]
|
|
BattleTaskPanel taskPanel;
|
|
|
|
[SerializeField]
|
|
TMP_Text txt_timer;
|
|
[SerializeField]
|
|
Button btn_activateBattlePass;
|
|
[SerializeField]
|
|
BPBanner bPBanner, bPBanner_bought;
|
|
BPBanner curBanner;
|
|
protected override async void Start()
|
|
{
|
|
base.Start();
|
|
_dataProvider = GContext.container.Resolve<BattlePassDataProvider>();
|
|
_playerItemData = GContext.container.Resolve<PlayerItemData>();
|
|
GContext.OnEvent<BpVipUnlock>().Subscribe(_ =>
|
|
{
|
|
RefreshVipBtn();
|
|
|
|
if (recordPanel.gameObject.activeSelf)
|
|
{
|
|
recordPanel.BpVipUnlock();
|
|
}
|
|
else
|
|
{
|
|
GContext.Publish(new BpGetExp());
|
|
}
|
|
}).AddTo(disposables);
|
|
btn_close.OnClickAsObservable().Subscribe(x => Close()).AddTo(disposables);
|
|
btn_activateBattlePass.OnClickAsObservable().Subscribe(x => OnActivateBP()).AddTo(disposables);
|
|
|
|
tog_task.onValueChanged.AddListener(x => SwitchPanel(1));
|
|
tog_battlePass.onValueChanged.AddListener(x => SwitchPanel(0));
|
|
GContext.OnEvent<ResAddEvent>().Subscribe(x => OnResAnimation(x)).AddTo(disposables);
|
|
Refresh();
|
|
await Awaiters.NextFrame;
|
|
SwitchPanel(0);
|
|
_dataProvider.CheckIfGetLastBpRewards();
|
|
}
|
|
|
|
private async void OnActivateBP()
|
|
{
|
|
if (_dataProvider.IsUnlockVip)
|
|
return;
|
|
btn_activateBattlePass.enabled = false;
|
|
await UIManager.Instance.ShowUI(UITypes.BattlePassActivePopupPanel);
|
|
btn_activateBattlePass.enabled = true;
|
|
bPBanner_bought.RefreshLevelBanner();
|
|
}
|
|
|
|
private void Close()
|
|
{
|
|
GContext.Publish(new RestartShowHomeUIEvent());
|
|
UIManager.Instance.DestroyUI(UITypes.BattlePassPanel);
|
|
}
|
|
|
|
private void SwitchPanel(int type)
|
|
{
|
|
if (type == 0)
|
|
{
|
|
tog_task.enabled = true;
|
|
tog_battlePass.enabled = false;
|
|
|
|
go_battlePassBtn.SetActive(true);
|
|
go_taskBtn.SetActive(false);
|
|
recordPanel.Open();
|
|
taskPanel.Close();
|
|
}
|
|
else if (type == 1)
|
|
{
|
|
tog_battlePass.enabled = true;
|
|
tog_task.enabled = false;
|
|
|
|
go_battlePassBtn.SetActive(false);
|
|
go_taskBtn.SetActive(true);
|
|
|
|
recordPanel.Close();
|
|
taskPanel.Open();
|
|
}
|
|
}
|
|
|
|
public void Refresh()
|
|
{
|
|
RefreshTimer();
|
|
RefreshVipBtn();
|
|
curBanner.RefreshLevelBanner();
|
|
}
|
|
|
|
private void RefreshTimer()
|
|
{
|
|
DateTime curTimer = ZZTimeHelper.UtcNow().UtcNowOffset();
|
|
DateTime endTime = GContext.container.Resolve<FishingEventData>().GetEventEndTime(_dataProvider.Data.BattlePassRecord.ID);
|
|
SetTimer(endTime - curTimer);
|
|
}
|
|
private void SetTimer(TimeSpan duration)
|
|
{
|
|
txt_timer.text = ConvertTools.ConvertTime2(duration);
|
|
var timer = Observable.Interval(TimeSpan.FromSeconds(1))
|
|
.TakeWhile(seconds => seconds <= duration.TotalSeconds)
|
|
.Subscribe(seconds =>
|
|
txt_timer.text = ConvertTools.ConvertTime2(duration.Subtract(TimeSpan.FromSeconds(seconds)))
|
|
, () => Close())
|
|
.AddTo(disposables)
|
|
;
|
|
}
|
|
void RefreshVipBtn()
|
|
{
|
|
bool isVip = _dataProvider.Data.BattlePassRecord.IsUnlockVip != 0;
|
|
bPBanner_bought.gameObject.SetActive(isVip);
|
|
bPBanner.gameObject.SetActive(!isVip);
|
|
if (isVip)
|
|
{
|
|
curBanner = bPBanner_bought;
|
|
}
|
|
else
|
|
{
|
|
curBanner = bPBanner;
|
|
}
|
|
}
|
|
private void OnResAnimation(ResAddEvent addEvent)
|
|
{
|
|
if (addEvent.Type == 0)
|
|
{
|
|
cfg.Item item = GContext.container.Resolve<cfg.Tables>().TbItem.GetOrDefault(addEvent.id);
|
|
if (item != null)
|
|
{
|
|
addEvent.Type = item.Type;
|
|
addEvent.SubType = item.SubType;
|
|
}
|
|
}
|
|
if (addEvent.Type == 7 && addEvent.SubType == 3)
|
|
{
|
|
if (_tokenSource != null)
|
|
{
|
|
_tokenSource.Cancel();
|
|
_tokenSource.Dispose();
|
|
}
|
|
|
|
_tokenSource = new CancellationTokenSource();
|
|
curBanner.ResAnimation(_tokenSource.Token, _fillTime, _levelUpWaitTime);
|
|
}
|
|
}
|
|
}
|