Files
Continentis/Assets/Scripts/MainGame/UI/General/InformationBox.cs
2025-12-10 18:22:26 -05:00

70 lines
2.5 KiB
C#

using Lean.Pool;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
namespace Continentis.MainGame.UI
{
public class InformationBox : UIElementBase
{
public RectTransform mainBox;
public Image titleBackground, contentBackground;
public TMP_Text titleText, contentText;
public static InformationBox Create(RectTransform parent, ref InformationBox exclusivity)
{
GameObject infoBoxPrefab = MainGameManager.Instance.basePrefabs.informationBox;
exclusivity ??= LeanPool.Spawn(infoBoxPrefab, parent).GetComponent<InformationBox>();
return exclusivity;
}
public static void Despawn(ref InformationBox infoBox)
{
if (infoBox != null)
{
LeanPool.Despawn(infoBox.gameObject);
infoBox = null;
}
}
/// <summary>
/// 处于LayoutGroup中时的初始化
/// </summary>
public void Initialize(string title, string content)
{
titleText.text = title;
contentText.text = content;
SetBackground();
}
/// <summary>
/// 非LayoutGroup中时的初始化
/// </summary>
public void Initialize(string title, string content, Vector2 basePosition)
{
titleText.text = title;
contentText.text = content;
SetBackground();
SetPosition(basePosition);
}
private void SetBackground()
{
LayoutRebuilder.ForceRebuildLayoutImmediate(mainBox);
titleBackground.rectTransform.sizeDelta = new Vector2(0, titleText.preferredHeight + 10);
contentBackground.rectTransform.sizeDelta = new Vector2(0, contentText.preferredHeight + 10);
LayoutRebuilder.ForceRebuildLayoutImmediate(mainBox);
rectTransform.sizeDelta = mainBox.sizeDelta;
}
private void SetPosition(Vector2 basePosition)
{
float xOffset = basePosition.x < 0 ? rectTransform.sizeDelta.x / 2 : -rectTransform.sizeDelta.x / 2;
float yOffset = basePosition.y < Screen.height * 0.25f ? rectTransform.sizeDelta.y / 2 : -rectTransform.sizeDelta.y / 2;
rectTransform.anchorMax = new Vector2(0.5f, 0.5f);
rectTransform.anchorMin = new Vector2(0.5f, 0.5f);
rectTransform.anchoredPosition = new Vector2(basePosition.x + xOffset, basePosition.y + yOffset);
}
}
}