Files
ft/Client/Assets/Scripts/UI/Home/HomeBtnCubeMelt.cs
2026-06-29 21:18:33 +08:00

240 lines
5.6 KiB
C#

// 锻刀大赛按钮
using System;
using System.Collections.Generic;
using asap.core;
using game;
using GameCore;
using TMPro;
using UniRx;
using UnityEngine;
using UnityEngine.UI;
public class HomeBtnCubeMelt : EventButtonResource
{
//
private CompositeDisposable _disposables;
//
private Button _btnEnter;
private Image _iconImage;
private GameObject _redpoint;
private TMP_Text _textTime;
// Manager
private EventCubeMeltManager _thisEventManager;
private Timer _timer;
#region
private void Awake()
{
try
{
_thisEventManager = GContext.container.Resolve<EventCubeMeltManager>();
}
catch (Exception e)
{
Log($"Failed to resolve EventCubeMeltManager: {e.Message}");
gameObject.SetActive(false);
return;
}
var iconTransform = transform.Find("icon");
if (iconTransform)
_iconImage = iconTransform.GetComponent<Image>();
_btnEnter = transform.GetComponent<Button>();
var timeTransform = transform.Find("text_time");
if (timeTransform)
_textTime = timeTransform.GetComponent<TMP_Text>();
}
private void OnEnable()
{
if (_thisEventManager == null)
{
Log("Manager not available");
gameObject.SetActive(false);
return;
}
var bRet = _thisEventManager.CheckOpen();
if (!bRet)
{
gameObject.SetActive(false);
return;
}
_thisEventManager.SetRedPoint();
var eventCubeMeltMainData = _thisEventManager.EventCubeMeltMainData;
if (eventCubeMeltMainData == null)
{
gameObject.SetActive(false);
return;
}
var resList = new List<string>()
{
eventCubeMeltMainData.Icon,
eventCubeMeltMainData.UIPanel,
eventCubeMeltMainData.InfoPanel,
};
CheckResource(resList);
AddEvents();
StartCountDown();
}
private void Start()
{
_btnEnter.onClick.AddListener(OnBtnEnter);
}
private void OnDisable()
{
RemoveEvents();
}
protected override void OnDestroy()
{
base.OnDestroy();
if (_btnEnter)
_btnEnter.onClick.RemoveAllListeners();
StopCountDown();
RemoveEvents();
}
#endregion
protected override void OnLoadEventResource()
{
//TODO: 检查是否郧西开放
if (false)
gameObject.SetActive(false);
gameObject.SetActive(true);
var iconName = _thisEventManager.EventCubeMeltMainData.Icon;;
if (_iconImage)
GContext.container.Resolve<IUIService>().SetImageSprite(_iconImage, iconName);
}
#region Events
private void AddEvents()
{
_disposables ??= new CompositeDisposable();
}
private void RemoveEvents()
{
_disposables?.Dispose();
_disposables = null;
}
#endregion
#region
private void OnBtnEnter()
{
Log("OnBtnEnter");
// InSandDigAct();
StartEnterCubeMeltAct();
StopCountDown();
}
private void StartCountDown()
{
StopCountDown();
var timeSpan = _thisEventManager.GetRemainingTime();
UpdateTimeDisplay(timeSpan);
var seconds = timeSpan.TotalSeconds;
_timer = this.AttachTimer((float)seconds, null,
elapsed =>
{
var now = _thisEventManager.GetRemainingTime();
UpdateTimeDisplay(now);
if (now.TotalMilliseconds < 0)
{
OnCountDownFinished();
}
}, useRealTime: true);
}
private void UpdateTimeDisplay(TimeSpan timeSpan)
{
if (_textTime == null) return;
if (timeSpan.TotalMilliseconds > 0)
{
_textTime.text = ConvertTools.ConvertTime2(timeSpan.Days, timeSpan.Hours, timeSpan.Minutes, timeSpan.Seconds);
}
else
{
_textTime.text = LocalizationMgr.GetText("UI_EventRankPopupPanel_13");
}
}
private void StopCountDown()
{
_timer?.Cancel();
_timer = null;
}
private void OnCountDownFinished()
{
gameObject.SetActive(false);
StopCountDown();
}
#endregion
#region UserFunction
private async void StartEnterCubeMeltAct()
{
await Awaiters.NextFrame;
var data = _thisEventManager.EventCubeMeltMainData;
var loadResourceService = GContext.container.Resolve<ILoadResourceService>();
var isCanEnter = await loadResourceService.Loads(new List<string> {
data.UIPanel, data.InfoPanel ,
});
if (isCanEnter)
{
EnterCubeMeltAct();
}
else
{
var panel = await UIManager.Instance.ShowUI(UITypes.CloudTransitionPanel);
panel.GetComponent<CloudTransitionPanel>().SetBtn(true, EnterCubeMeltAct);
}
}
private void EnterCubeMeltAct()
{
// _thisEventManager.FishingEvent.ID ==
GContext.Publish(_thisEventManager.FishingEvent?.SubType == 16
? new UnloadActToNextAct("BlockAct")
: new UnloadActToNextAct("CubeMeltAct"));
}
#endregion
#region Log
private static void Log(object message)
{
Debug.Log($"<color=orange>HomeBtnCubeMelt => {message}</color>");
}
#endregion
}