Files
back_cantanBuilding/Assets/Scripts/UI/Home/HomeBtnChains.cs
2026-05-26 16:15:54 +08:00

136 lines
3.9 KiB
C#

using asap.core;
using DataCenter;
using GameCore;
using System.Collections.Generic;
using TMPro;
using UniRx;
using UnityEngine;
using UnityEngine.UI;
public class HomeBtnChains : EventButtonResource
{
// Start is called before the first frame update
// TODO: 未实现释放,上一个管理器也是如此,记得注意
private OfferChainsChestManager _offerChainsChestManager;
// UI
private Image _iconImage;
private GameObject _redpoint;
private Button _btnEnter;
private TMP_Text _textTime;
private Timer _timer;
private CompositeDisposable _disposables = new();
private void Awake()
{
_offerChainsChestManager = GContext.container.Resolve<OfferChainsChestManager>();
_iconImage = transform.Find("icon_task").GetComponent<Image>();
_redpoint = transform.Find("redpoint").gameObject;
_btnEnter = transform.GetComponent<Button>();
_textTime = transform.Find("text_time").GetComponent<TMP_Text>();
GContext.OnEvent<OfferChainsRefreshEvent>().Subscribe(OnRefreshByEvent).AddTo(_disposables);
}
private void OnEnable()
{
_offerChainsChestManager.CheckInit();
//
if (!_offerChainsChestManager.CheckOpen())
{
gameObject.SetActive(false);
return;
}
_redpoint.SetActive(_offerChainsChestManager.IsFirstOpen);
List<string> resList = new List<string>
{
_offerChainsChestManager.OfferChainsChestMain.Icon,
_offerChainsChestManager.OfferChainsChestMain.UIPanel
};
CheckResource(resList);
}
private void StopCountDown()
{
_timer?.Cancel();
_timer = null;
}
private void StartCountDown()
{
StopCountDown();
var timeSpan = _offerChainsChestManager.GetTimeRemain();
_textTime.text = ConvertTools.ConvertTime2(timeSpan.Days, timeSpan.Hours, timeSpan.Minutes, timeSpan.Seconds);
var seconds = timeSpan.TotalSeconds;
_timer = this.AttachTimer((float)seconds, null,
elapsed =>
{
var now = _offerChainsChestManager.GetTimeRemain();
_textTime.text = ConvertTools.ConvertTime2(now.Days, now.Hours, now.Minutes, now.Seconds);
if (now.TotalMilliseconds < 0)
{
OnCountDownFinished();
_textTime.text = LocalizationMgr.GetText("UI_EventRankPopupPanel_13");
}
}, useRealTime: true);
}
private void OnCountDownFinished()
{
gameObject.SetActive(false);
StopCountDown();
_offerChainsChestManager.Settle();
}
void Start()
{
_btnEnter.onClick.AddListener(OnBtnEnter);
StartCountDown();
}
private void OnDestroy()
{
_btnEnter.onClick.RemoveAllListeners();
StopCountDown();
_disposables?.Dispose();
_disposables = null;
}
//OnBtnEvent
private void OnBtnEnter()
{
Log("OnBtnEnter");
// 进入游戏场景
StartEnter();
}
//
private void StartEnter()
{
_timer?.Cancel();
_timer = null;
_offerChainsChestManager.OnEnterGameAct();
_redpoint.SetActive(_offerChainsChestManager.IsFirstOpen);
}
private void OnRefreshByEvent(OfferChainsRefreshEvent evt)
{
if (_offerChainsChestManager.IsFinished())
{
gameObject.SetActive(false);
}
}
private static void Log(object message)
{
Debug.Log($"<color=orange>HomeBtnChains => {message} </color>");
}
protected override void OnLoadEventResource()
{
if (_offerChainsChestManager.CheckOpen())
{
gameObject.SetActive(true);
var iconName = _offerChainsChestManager.OfferChainsChestMain.Icon;
GContext.container.Resolve<IUIService>().SetImageSprite(_iconImage, iconName);
}
}
}