| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- using DG.Tweening;
- using System;
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEngine.UI;
- using static UnityCommon.MessageBoxParams;
- namespace UnityCommon
- {
- public class MessageBox : MonoBehaviour
- {
- [SerializeField]
- private GameObject goRoot;
- [SerializeField]
- private Text text_info;
- [SerializeField]
- private Button btn_confirm;
- [SerializeField]
- private Button btn_cancel;
- [SerializeField]
- private Button btn_yes;
- [SerializeField]
- private Button btn_no;
- [SerializeField]
- private Button btn_forbid;
- public Action<bool> ShowAction;
- public void OnClickConfirm() { }
- public void OnClickCancel() { }
- public void OnClickYes() { }
- public void OnClickNo() { }
- private void Awake()
- {
- btn_confirm.onClick.AddListener(OnClick_Confirm);
- btn_cancel.onClick.AddListener(OnClick_Cancel);
- btn_yes.onClick.AddListener(OnClick_Yes);
- btn_no.onClick.AddListener(OnClick_No);
- btn_forbid.onClick.AddListener(OnClick_Forbid);
- }
- private void OnClick_Forbid()
- {
- goRoot.transform.DOShakePosition(0.3f, 5, 80, 90, true, false);
- }
- static Stack<MessageInfo> stackMsg = new Stack<MessageInfo>();
- private void ShowMessage(MessageBoxParams p)
- {
- ShowMessage(p.message, p.messageType, p.callback);
- }
- public void ShowMessage(MessageInfo messageInfo)
- {
- #if UNITY_SERVER
- Debug.Log(messageInfo.info);
- #else
- stackMsg.Push(messageInfo);
- UpdateMsgUI();
- #endif
- }
- public void ShowMessage(string info, MessageType messageType = MessageType.Confirm, Action<ResultType> callback = null)
- {
- ShowMessage(new MessageInfo() { info = info, messageType = messageType, callback = callback });
- }
- private void UpdateMsgUI()
- {
- if (stackMsg.Count > 0)
- {
- MessageInfo messageInfo = stackMsg.Peek();
- text_info.text = messageInfo.info;
- btn_cancel.gameObject.SetActive(messageInfo.messageType == MessageType.ConfirmCancel || messageInfo.messageType == MessageType.YesNoCancel);
- btn_confirm.gameObject.SetActive(messageInfo.messageType == MessageType.Confirm || messageInfo.messageType == MessageType.ConfirmCancel);
- btn_yes.gameObject.SetActive(messageInfo.messageType == MessageType.YesNoCancel);
- btn_no.gameObject.SetActive(messageInfo.messageType == MessageType.YesNoCancel);
- ShowDlg();
- }
- else
- {
- CloseDlg();
- }
- }
- private void OnClick_Confirm()
- {
- ReturnResult(ResultType.Confirm);
- }
- private void OnClick_Cancel()
- {
- ReturnResult(ResultType.Cancel);
- }
- private void OnClick_Yes()
- {
- ReturnResult(ResultType.Yes);
- }
- private void OnClick_No()
- {
- ReturnResult(ResultType.No);
- }
- private void ReturnResult(ResultType resultType)
- {
- var msgInfo = stackMsg?.Pop();
- msgInfo?.callback?.Invoke(resultType);
- UpdateMsgUI();
- }
- private void CloseDlg()
- {
- ShowAction?.Invoke(false);
- Visible = false;
- }
- private void ShowDlg()
- {
- ShowAction?.Invoke(true);
- Visible = true;
- }
- private bool visible;
- public bool Visible
- {
- get { return visible; }
- set
- {
- gameObject.SetActive(value);
- visible = value;
- }
- }
- public class MessageInfo
- {
- public string info;
- public MessageType messageType;
- public Action<ResultType> callback;
- }
- }
- }
|