Files
test/Assets/PerfectWorld/Scripts/UI/CDlgMessageBox.cs
T
2026-03-03 10:59:00 +07:00

105 lines
3.2 KiB
C#

using System;
using BrewMonster.UI;
using PerfectWorld.Scripts.Common;
using UnityEngine;
using TMPro;
using UnityEngine.UI;
using static CECUIManager;
namespace BrewMonster
{
public enum MessageBoxType
{
YesButton,
NoButton,
BothYesNoButton,
}
public struct MessageBoxData
{
public string Title;
public string Message;
public AUIDialog Dlg;
public MessageBoxType MessageBoxType;
public Action OnClickedYes;
public Action OnClickedNo;
}
public class CDlgMessageBox : AUIDialog
{
[SerializeField] private TMP_Text titleText;
[SerializeField] private TMP_Text messageText;
[SerializeField] private Button okButton;
[SerializeField] private Button _noButton;
[SerializeField] private Button _closeButton;
public override DialogueType DialogueType => DialogueType.MessageBox;
private MessageBoxData _messageData;
public override void OnEnable()
{
base.OnEnable();
okButton.onClick.AddListener(OnOkClicked);
_noButton.onClick.AddListener(OnNoClicked);
_closeButton.onClick.AddListener(OnCloseClicked);
}
public override void OnDisable()
{
okButton.onClick.RemoveListener(OnOkClicked);
_noButton.onClick.RemoveListener(OnNoClicked);
_closeButton.onClick.RemoveListener(OnCloseClicked);
}
#region Button Events
private void OnOkClicked()
{
EventBus.Publish(new MessageBoxEvent(1,_messageData.Dlg));
_messageData.OnClickedYes?.Invoke();
Show(false);
}
private void OnNoClicked()
{
EventBus.Publish(new MessageBoxEvent(0,_messageData.Dlg));
_messageData.OnClickedNo?.Invoke();
Show(false);
}
private void OnCloseClicked()
{
// treat the close button as OK button
OnOkClicked();
}
#endregion
public void ShowMessageBox(MessageBoxData messageBoxData)
{
_messageData = messageBoxData;
// messageBoxData.Message = messageBoxData.Message?
// .Replace("\r\n", "\n")
// .Replace("\r", "\n");
messageBoxData.Message = EC_TextFormatter.FormatForTextMeshPro(messageBoxData.Message);
SetName(string.IsNullOrEmpty(messageBoxData.Title) ? "" : messageBoxData.Title);
messageText.text = string.IsNullOrEmpty(messageBoxData.Message) ? "" : messageBoxData.Message;
okButton.gameObject.SetActive(false);
_noButton.gameObject.SetActive(false);
switch (_messageData.MessageBoxType)
{
case MessageBoxType.YesButton:
okButton.gameObject.SetActive(true);
break;
case MessageBoxType.NoButton:
_noButton.gameObject.SetActive(true);
break;
case MessageBoxType.BothYesNoButton:
okButton.gameObject.SetActive(true);
_noButton.gameObject.SetActive(true);
break;
}
Show(true);
}
}
}