Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / ui / bottomTips / BottomTipsPanel.cs
@lijincheng lijincheng on 21 Jul 2023 3 KB UiGrid 添加更多操作函数
  1. using System.Collections;
  2. using Godot;
  3.  
  4. namespace UI.BottomTips;
  5.  
  6. /// <summary>
  7. /// 底部提示面板
  8. /// </summary>
  9. public partial class BottomTipsPanel : BottomTips
  10. {
  11. private long _id = -1;
  12. private float _offsetY;
  13. //动画播放时间
  14. private float _animationTime = 0.5f;
  15. //动画移动的像素
  16. private int _movePixel = 153;
  17.  
  18. public override void OnCreateUi()
  19. {
  20. _offsetY = L_Panel.Instance.Position.Y - (Position.Y + Size.Y);
  21. }
  22.  
  23. public override void OnShowUi()
  24. {
  25.  
  26. }
  27.  
  28. public override void OnHideUi()
  29. {
  30. }
  31.  
  32. /// <summary>
  33. /// 执行入场流程
  34. /// </summary>
  35. public void PlayInStep(Texture2D icon, string message)
  36. {
  37. if (_id >= 0)
  38. {
  39. StopCoroutine(_id);
  40. HideUi();
  41. }
  42. _id = StartCoroutine(RunAnimation(icon, message));
  43. }
  44.  
  45. /// <summary>
  46. /// 设置图标
  47. /// </summary>
  48. public void SetIcon(Texture2D icon)
  49. {
  50. S_TextureRect.Instance.Texture = icon;
  51. }
  52. /// <summary>
  53. /// 设置文本内容
  54. /// </summary>
  55. public void SetMessage(string message)
  56. {
  57. S_Label.Instance.Text = message;
  58. }
  59.  
  60. private IEnumerator RunAnimation(Texture2D icon, string message)
  61. {
  62. //还原位置
  63. var pos = L_Panel.Instance.Position;
  64. pos.Y = Position.Y + Size.Y + _offsetY;
  65. L_Panel.Instance.Position = pos;
  66. SetIcon(icon);
  67. SetMessage(message);
  68. yield return 0;
  69. ShowUi();
  70. L_Panel.Instance.ResetSize();
  71. yield return 0;
  72. //重新计算中心点
  73. pos.X = Size.X / 2 - L_Panel.Instance.Size.X / 2;
  74. L_Panel.Instance.Position = pos;
  75. yield return 0;
  76.  
  77. //向上移动
  78. var frame = 60 * _animationTime;
  79. var stepPixel = _movePixel / frame;
  80. for (var i = 0; i < frame; i++)
  81. {
  82. pos.X = L_Panel.Instance.Position.X;
  83. pos.Y -= stepPixel;
  84. L_Panel.Instance.Position = pos;
  85. yield return 0;
  86. }
  87.  
  88. yield return new WaitForSeconds(3.5f);
  89. //向下移动
  90. for (var i = 0; i < frame; i++)
  91. {
  92. pos.X = L_Panel.Instance.Position.X;
  93. pos.Y += stepPixel;
  94. L_Panel.Instance.Position = pos;
  95. yield return 0;
  96. }
  97.  
  98. HideUi();
  99. _id = -1;
  100. }
  101. private static BottomTipsPanel _instance;
  102. public static void Init()
  103. {
  104. _instance = UiManager.CreateUi<BottomTipsPanel>(UiManager.UiName.BottomTips);
  105. }
  106.  
  107. /// <summary>
  108. /// 打开Tips, 并设置图标和内容
  109. /// </summary>
  110. /// <param name="icon">显示图标</param>
  111. /// <param name="message">显示消息</param>
  112. public static void ShowTips(string icon, string message)
  113. {
  114. ShowTips(ResourceManager.Load<Texture2D>(icon), message);
  115. }
  116.  
  117. /// <summary>
  118. /// 打开Tips, 并设置图标和内容
  119. /// </summary>
  120. /// <param name="icon">显示图标</param>
  121. /// <param name="message">显示消息</param>
  122. public static void ShowTips(Texture2D icon, string message)
  123. {
  124. _instance.PlayInStep(icon, message);
  125. }
  126. }