/// #pkgName FGUI包名
/// #panelName UIPanel名字
/// #UIName = $"{#pkgName}{#panelName}" UIKey名字
/// 该脚本由模板创建
/// created by cb 2024
using FairyGUI;
using FL.Data;
using System;
using UnityEngine;
using XGame.Database;
using XGame.Framework.Time;
using XGame.Framework.UI;
namespace FL.FGUI
{
///
/// UI逻辑处理类
///
///
public partial class TreasureChestReduceTimePanelCtrl : UIController
{
private int _useCount; // 当前要使用的加速卡数量
private int _maxCount; // 拥有的加速卡的数量
private int _needNum; // 完成升级时间需要的加速卡数量
private long _needTime; // 完成升级需要的时间(豪秒)
private int _reduceTime; // 加速卡减少时间(秒)
private long _openUIServerTime; // 打开此界面时所处的当前的时间戳(用于加速类道具打开此界面停留时间比较久时)
private ITimer _upgradeTimer; // 宝箱升级时间倒计时定时器
private const int StayTime = 30000; // 停留时间超过30秒
protected override void OnEnable(object intent)
{
AddUIListenres();
InitUI((int)intent);
_openUIServerTime = Context.Time.GetNowTime();
}
protected override void OnDisable()
{
RemoveUIListenres();
ClearUpgradeTimer();
}
#region UI事件
private void AddUIListenres()
{
VM.AddBtn.onClick.Add(OnClickAddBtn);
VM.SubBtn.onClick.Add(OnClickSubBtn);
VM.UseBtn.onClick.Add(OnClickUseBtn);
}
private void RemoveUIListenres()
{
VM.AddBtn.onClick.Remove(OnClickAddBtn);
VM.SubBtn.onClick.Remove(OnClickSubBtn);
VM.UseBtn.onClick.Remove(OnClickUseBtn);
}
private void OnClickAddBtn(EventContext context)
{
_useCount += 1;
if (_useCount > _needNum) _useCount = _needNum;
ShowUseCount();
}
private void OnClickSubBtn(EventContext context)
{
_useCount -= 1;
if (_useCount < 0) _useCount = 0;
ShowUseCount();
}
private void OnClickUseBtn(EventContext context)
{
var curServerTime = Context.Time.GetNowTime(); // 当前服务器时间戳
if (curServerTime < DragonEggData.Instance.UpLvTime)
{
if (curServerTime - _openUIServerTime > StayTime)
{
ShowUseNum();
}
DragonEggService.Instance.SendToAcceleration(1,_useCount);
}
Context.ClosePanel();
}
#endregion
private void InitUI(int itemId)
{
_maxCount = (int)ItemData.Instance.GetItemNum(itemId); // 当前拥有的道具数量
var itemInfo = ItemTableRepo.Get(itemId);
if (itemInfo != null)
{
VM.ItemIcon.icon = itemInfo.Icon;
_reduceTime = itemInfo.Effect[1];
}
ShowUI();
}
private void ShowUI()
{
ShowUseNum();
ShowUseCount();
ClearUpgradeTimer();
if (_upgradeTimer == null)
{
_upgradeTimer = Context.Time.AddLooperTimer(500, (int dt) =>
{
ShowTimeUI();
});
}
}
private void ClearUpgradeTimer()
{
if (_upgradeTimer != null)
{
_upgradeTimer.Cancel();
_upgradeTimer = null;
}
}
private void ShowUseNum()
{
_needTime = DragonEggData.Instance.UpLvTime - Context.Time.GetNowTime();
_needNum = (int)(_needTime + (_reduceTime - 1) * 1000) / (_reduceTime * 1000);
if (_needNum > _maxCount) _needNum = _maxCount;
_useCount = _needNum;
}
private void ShowBtnState()
{
VM.AddBtn.enabled = _useCount < _needNum;
VM.SubBtn.enabled = _useCount > 0;
VM.UseBtn.enabled = _useCount > 0;
}
private void ShowUseCount()
{
VM.NumLabel.text = $"{_useCount}/{_needNum}";
if (_needNum > 0)ShowTimeUI();
ShowBtnState();
}
private void ShowTimeUI()
{
_needTime = DragonEggData.Instance.UpLvTime - Context.Time.GetNowTime();
if (_needTime < 0)
{
ClearUpgradeTimer();
_useCount = 0;
_needNum = 0;
ShowUseCount();
VM.DescLabel.text = string.Format(StringDefine.treasureChestUpTime, "00:00:00", "00:00:00");
}
else
{
TimeSpan timeData = TimeSpan.FromMilliseconds(_needTime);
TimeSpan reduceTime = TimeSpan.FromSeconds(_useCount * _reduceTime);
VM.DescLabel.text = string.Format(StringDefine.treasureChestUpTime, timeData.ToString(@"hh\:mm\:ss"), reduceTime.ToString("hh\\:mm\\:ss"));
}
}
}
}