123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- /// #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
- {
- /// <summary>
- /// UI逻辑处理类
- /// </summary>
- /// <typeparam name=""></typeparam>
- public partial class TreasureChestReduceTimePanelCtrl : UIController<TreasureChestReduceTimePanelVM>
- {
- 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"));
- }
- }
- }
- }
|