- using System.Collections;
- using Godot;
- namespace UI.BottomTips;
- /// <summary>
- /// 底部提示面板
- /// </summary>
- public partial class BottomTipsPanel : BottomTips
- {
- private long _id = -1;
- private float _offsetY;
- //动画播放时间
- private float _animationTime = 0.5f;
- //动画移动的像素
- private int _movePixel = 153;
- public override void OnCreateUi()
- {
- _offsetY = L_Panel.Instance.Position.Y - (Position.Y + Size.Y);
- }
- public override void OnShowUi()
- {
- }
- public override void OnHideUi()
- {
- }
- /// <summary>
- /// 执行入场流程
- /// </summary>
- public void PlayInStep(Texture2D icon, string message)
- {
- if (_id >= 0)
- {
- StopCoroutine(_id);
- HideUi();
- }
- _id = StartCoroutine(RunAnimation(icon, message));
- }
- /// <summary>
- /// 设置图标
- /// </summary>
- public void SetIcon(Texture2D icon)
- {
- S_TextureRect.Instance.Texture = icon;
- }
- /// <summary>
- /// 设置文本内容
- /// </summary>
- public void SetMessage(string message)
- {
- S_Label.Instance.Text = message;
- }
- private IEnumerator RunAnimation(Texture2D icon, string message)
- {
- //还原位置
- var pos = L_Panel.Instance.Position;
- pos.Y = Position.Y + Size.Y + _offsetY;
- L_Panel.Instance.Position = pos;
- SetIcon(icon);
- SetMessage(message);
- yield return 0;
- ShowUi();
- L_Panel.Instance.ResetSize();
- yield return 0;
- //重新计算中心点
- pos.X = Size.X / 2 - L_Panel.Instance.Size.X / 2;
- L_Panel.Instance.Position = pos;
- yield return 0;
- //向上移动
- var frame = 60 * _animationTime;
- var stepPixel = _movePixel / frame;
- for (var i = 0; i < frame; i++)
- {
- pos.X = L_Panel.Instance.Position.X;
- pos.Y -= stepPixel;
- L_Panel.Instance.Position = pos;
- yield return 0;
- }
- yield return new WaitForSeconds(3.5f);
- //向下移动
- for (var i = 0; i < frame; i++)
- {
- pos.X = L_Panel.Instance.Position.X;
- pos.Y += stepPixel;
- L_Panel.Instance.Position = pos;
- yield return 0;
- }
- HideUi();
- _id = -1;
- }
- private static BottomTipsPanel _instance;
- public static void Init()
- {
- _instance = UiManager.CreateUi<BottomTipsPanel>(UiManager.UiName.BottomTips);
- }
- /// <summary>
- /// 打开Tips, 并设置图标和内容
- /// </summary>
- /// <param name="icon">显示图标</param>
- /// <param name="message">显示消息</param>
- public static void ShowTips(string icon, string message)
- {
- ShowTips(ResourceManager.Load<Texture2D>(icon), message);
- }
- /// <summary>
- /// 打开Tips, 并设置图标和内容
- /// </summary>
- /// <param name="icon">显示图标</param>
- /// <param name="message">显示消息</param>
- public static void ShowTips(Texture2D icon, string message)
- {
- _instance.PlayInStep(icon, message);
- }
- }