备份CatanBuilding瘦身独立工程
This commit is contained in:
172
Assets/Scripts/UI/BattlePass/BattlePassPanel.cs
Normal file
172
Assets/Scripts/UI/BattlePass/BattlePassPanel.cs
Normal file
@@ -0,0 +1,172 @@
|
||||
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();
|
||||
recordPanel.BpVipUnlock();
|
||||
}).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);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user