80 lines
1.8 KiB
C#
80 lines
1.8 KiB
C#
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);
|
||
}
|
||
}
|
||
}
|