87 lines
1.7 KiB
C#
87 lines
1.7 KiB
C#
using UnityEngine;
|
|
using MonsterLove.StateMachine;
|
|
using DG.Tweening;
|
|
|
|
public enum MessageStates
|
|
{
|
|
Init,
|
|
Add,
|
|
Show,
|
|
Del
|
|
}
|
|
|
|
public class MessageElement : MonoBehaviour
|
|
{
|
|
[SerializeField] TMPro.TextMeshProUGUI messageText;
|
|
|
|
public RectTransform RectTransform
|
|
{
|
|
get
|
|
{
|
|
return transform as RectTransform;
|
|
}
|
|
}
|
|
|
|
public string Message { get; private set; }
|
|
|
|
private float remaining;
|
|
|
|
private MessagePanel panel;
|
|
|
|
StateMachine<MessageStates> fsm;
|
|
|
|
public void Init(MessagePanel panel, string message, float duration)
|
|
{
|
|
this.panel = panel;
|
|
|
|
Message = message;
|
|
remaining = duration;
|
|
|
|
if (remaining < 0)
|
|
{
|
|
remaining = float.MaxValue;
|
|
}
|
|
|
|
if (fsm is null)
|
|
{
|
|
fsm = StateMachine<MessageStates>.Initialize(this);
|
|
}
|
|
fsm.ChangeState(MessageStates.Init);
|
|
}
|
|
|
|
private void Init_Enter()
|
|
{
|
|
// 这里初始化,包括位置和消息信息
|
|
messageText.text = Message;
|
|
messageText.rectTransform.anchoredPosition = new Vector2(messageText.rectTransform.rect.width, 0);
|
|
|
|
fsm.ChangeState(MessageStates.Add);
|
|
}
|
|
|
|
private void Add_Enter()
|
|
{
|
|
// 这里播动画
|
|
messageText.rectTransform.DOAnchorPosX(0, 0.2f);
|
|
|
|
fsm.ChangeState(MessageStates.Show);
|
|
}
|
|
|
|
private void Show_Update()
|
|
{
|
|
remaining -= Time.deltaTime;
|
|
if (remaining <= 0)
|
|
{
|
|
remaining = float.MaxValue;
|
|
fsm.ChangeState(MessageStates.Del);
|
|
}
|
|
}
|
|
|
|
private void Del_Enter()
|
|
{
|
|
// 理论上这里也需要做个动画,先不管了
|
|
|
|
panel.DelMessage(this);
|
|
}
|
|
|
|
}
|