Files
Unity20GameJam/Assets/Gameplay/Scripts/UI/MessagePanel.cs
2025-11-09 16:06:32 +08:00

80 lines
1.8 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using UnityEngine;
using A2W;
using Cysharp.Threading.Tasks;
using System.Collections.Generic;
using DG.Tweening;
public class MessagePanel : UIPanel
{
[SerializeField] MessageElement messageElementPrefab;
[SerializeField] RectTransform content;
List<MessageElement> messages;
public override void Init()
{
messages = new List<MessageElement>();
}
public override async UniTask Show()
{
await UniTask.Yield();
gameObject.SetActive(true);
}
public override async UniTask Hide()
{
await UniTask.Yield();
gameObject.SetActive(false);
}
public void AddMessage(string message, float duration = -1)
{
// 默认加到开头
AddMessage(message, duration, 0);
}
public void AddMessage(string message, float duration, int index)
{
var msgEle = Instantiate<MessageElement>(messageElementPrefab, content, false);
msgEle.Init(this, message, duration);
//messages.Add(msgEle);
messages.Insert(index, msgEle);
UpdateMessagesPosY();
}
public void DelMessage(string message)
{
foreach (var msg in messages)
{
if (msg.Message == message)
{
DelMessage(msg);
break;
}
}
}
public async void DelMessage(MessageElement msgEle)
{
messages.Remove(msgEle);
Destroy(msgEle.gameObject);
await UniTask.Yield();
UpdateMessagesPosY();
}
public void UpdateMessagesPosY()
{
// 根据messageElement的index使用Dotween移动PosY到指定位置-index * Height
for (int i = 0; i < messages.Count; i++)
{
messages[i].RectTransform.DOAnchorPosY(-i * messages[i].RectTransform.rect.height, 0.2f);
}
}
}