240 lines
5.6 KiB
C#
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
|
|
} |