CommonUseItemCtrl.cs 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. /// #pkgName FGUI包名
  2. /// #panelName UIPanel名字
  3. /// #UIName = $"{#pkgName}{#panelName}" UIKey名字
  4. /// 该脚本由模板创建
  5. /// created by cb 2024
  6. using FairyGUI;
  7. using FL.Data;
  8. using System;
  9. using XGame.Framework.UI;
  10. namespace FL.FGUI
  11. {
  12. public class UseItemParam
  13. {
  14. public int id;
  15. public int showNum;
  16. public int maxNum; // -1表示无上限
  17. public long endTime; // 结束时间戳
  18. public Action<int> onPromiseCallback; // 确定按钮回调函数
  19. public Action onCancelCallback; // 取消按钮回调函数
  20. }
  21. /// <summary>
  22. /// UI逻辑处理类
  23. /// </summary>
  24. /// <typeparam name=""></typeparam>
  25. public partial class CommonUseItemCtrl : UIController<CommonUseItemVM>
  26. {
  27. private bool _bPromiseCallback;
  28. private int _showCount;
  29. private long _openUIServerTime; // 打开此界面时所处的当前的时间戳(用于加速类道具打开此界面停留时间比较久时)
  30. private UseItemParam _useItemParam;
  31. private const int stayTime = 3000; // 停留时间超过30秒
  32. protected override void OnEnable(object intent)
  33. {
  34. _bPromiseCallback = false;
  35. AddUIListenres();
  36. AddEventListeners();
  37. if (intent != null)
  38. {
  39. _useItemParam = (UseItemParam)intent;
  40. }
  41. _openUIServerTime = Context.Time.GetNowTime();
  42. ShowUI();
  43. }
  44. protected override void OnDisable()
  45. {
  46. RemoveUIListenres();
  47. RemoveEventListeners();
  48. if (_bPromiseCallback)
  49. {
  50. if (_useItemParam?.onPromiseCallback != null) _useItemParam.onPromiseCallback(_showCount);
  51. }
  52. else
  53. {
  54. if (_useItemParam?.onCancelCallback != null) _useItemParam.onCancelCallback();
  55. }
  56. _bPromiseCallback = false;
  57. _showCount = 0;
  58. _openUIServerTime = 0;
  59. _useItemParam = null;
  60. }
  61. #region UI事件
  62. private void AddUIListenres()
  63. {
  64. VM.UseBtn.onClick.Add(OnClickUseBtn);
  65. VM.AddBtn.onClick.Add(OnClickAddBtn);
  66. VM.SubBtn.onClick.Add(OnClickSubBtn);
  67. }
  68. private void RemoveUIListenres()
  69. {
  70. VM.UseBtn.onClick.Remove(OnClickUseBtn);
  71. VM.AddBtn.onClick.Remove(OnClickAddBtn);
  72. VM.SubBtn.onClick.Remove(OnClickSubBtn);
  73. }
  74. private void OnClickUseBtn(EventContext context)
  75. {
  76. if (_useItemParam?.endTime > 0)
  77. {
  78. XGame.Log.Warn($"当前服务器时间:{Context.Time.GetNowTime()},_openUIServerTime:{_openUIServerTime}");
  79. if (Context.Time.GetNowTime() - _openUIServerTime > stayTime)
  80. {
  81. var needNum = GetRealNeed();
  82. if (needNum != _useItemParam.maxNum)
  83. {
  84. RefreshNeedTimeCard(needNum);
  85. return;
  86. }
  87. }
  88. }
  89. _bPromiseCallback = true;
  90. Context.ClosePanel();
  91. }
  92. private void OnClickAddBtn(EventContext context)
  93. {
  94. long itemCount = ItemData.Instance.GetItemNum(_useItemParam.id); // 当前拥有的道具数量
  95. var count = _showCount + 1;
  96. if (count <= itemCount)
  97. {
  98. if (_useItemParam.maxNum > 0 && count <= _useItemParam.maxNum)
  99. {
  100. _showCount = count;
  101. }
  102. ShowCount();
  103. }
  104. }
  105. private void OnClickSubBtn(EventContext context)
  106. {
  107. var count = _showCount - 1;
  108. if (count >= 0)
  109. {
  110. _showCount = count;
  111. ShowCount();
  112. }
  113. }
  114. #endregion
  115. #region 事件监听
  116. private void AddEventListeners()
  117. {
  118. }
  119. private void RemoveEventListeners()
  120. {
  121. }
  122. #endregion
  123. private void ShowUI()
  124. {
  125. long itemCount = ItemData.Instance.GetItemNum(_useItemParam.id); // 当前拥有的道具数量
  126. _showCount = itemCount < _useItemParam.showNum ? (int)itemCount : _useItemParam.showNum;
  127. ShowCount();
  128. }
  129. /// <summary>
  130. /// 显示数量按钮UI状态
  131. /// </summary>
  132. private void ShowBtnUI()
  133. {
  134. }
  135. private void ShowCount()
  136. {
  137. VM.NumLabel.text = _showCount.ToString();
  138. }
  139. // 获取实际需要的加速道具数量
  140. private int GetRealNeed()
  141. {
  142. return 1;
  143. }
  144. //时间变化,刷新卡所需数量重置
  145. private void RefreshNeedTimeCard(int maxNum)
  146. {
  147. _useItemParam.maxNum = maxNum;
  148. _useItemParam.showNum = _useItemParam.maxNum > 1 ? _useItemParam.maxNum - 1 : 0;
  149. _openUIServerTime = Context.Time.GetNowTime();
  150. ShowUI();
  151. }
  152. }
  153. }