TH1/Unity/Assets/Scripts/TH1_UI/MessageUI.cs
2025-08-26 14:32:20 +08:00

86 lines
2.2 KiB
C#

using UnityEngine;
using Logic;
using RuntimeData;
using UnityEngine.UI;
using Animancer;
using Logic.CrashSight;
using TMPro;
using Logic.Multilingual;
using TH1_Core.Managers;
using TH1_Logic.Core;
using UI;
public class MessageUI
{
private Main _main;
private MapData _mapData;
public GameObject ROMessageUI;
public bool NeedShow = false; // 外部可设置,控制显示状态
private bool _isShowing = false; // 当前逻辑状态
private bool _isAnimating = false; // 是否正在播放动画
private float _fadeDuration = 0.2f;
public MessageUI(Main main, MapData mapData)
{
_main = main;
_mapData = mapData;
ROMessageUI = UIManager.Instance.ROUIManager.transform.Find("MessagePanel").gameObject;
ROMessageUI.gameObject.SetActive(false);
}
public void Update()
{
if (_isAnimating) return;
if (NeedShow && !ROMessageUI.activeSelf)
{
Show();
}
else if (!NeedShow && ROMessageUI.activeSelf)
{
Hide();
}
}
public void Show()
{
if (_isShowing || _isAnimating) return;
_isShowing = true;
_isAnimating = true;
ROMessageUI.SetActive(true);
var animancer = ROMessageUI.GetComponent<AnimancerComponent>();
var fadeIn = Resources.Load<AnimationClip>("Animations/UI/MessagePanelFadeIn");
if (fadeIn != null)
{
animancer.Play(fadeIn);
}
Timer.Instance.TimerRegister(ROMessageUI, () => { _isAnimating = false; }, _fadeDuration,"MessageUI_Show");
}
public void Hide()
{
if (!_isShowing || _isAnimating) return;
_isShowing = false;
_isAnimating = true;
var animancer = ROMessageUI.GetComponent<AnimancerComponent>();
var fadeOut = Resources.Load<AnimationClip>("Animations/UI/MessagePanelFadeOut");
if (fadeOut != null)
{
animancer.Play(fadeOut);
}
Timer.Instance.TimerRegister(ROMessageUI, () =>
{
ROMessageUI.SetActive(false);
_isAnimating = false;
}, _fadeDuration,"MessageUI_Hide");
}
}