AkiraPixelWind/Assets/Scripts/Main/UI/UIMgr/Tips/Tips.cs
2022-12-29 18:20:40 +08:00

190 lines
4.5 KiB
C#

// Author: whc
// Desc: 各种提示
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Axibug.Runtime;
public enum eTipType
{
None,
Dialog, // 弹窗
Hint, // 飘字
Choice, // 选择框
Wait, // 等待框
}
public class Tips : GameComponent
{
//public static readonly Tips Instance= new Tips();
public static Tips Instance = null;
protected override void Awake()
{
base.Awake();
Instance = this;
}
private Queue<TipData> m_SafeTipQue; // 用于线程安全的提示队列
public Queue<TipData> SafeTipQue {
get {
if (m_SafeTipQue == null)
m_SafeTipQue = new Queue<TipData>();
return m_SafeTipQue;
}
}
// 提示框
public void ShowDialog(string _text, string _title = "提示")
{
DialogData vData = new DialogData(_text, _title);
Inform<TipData>.Dispatch(eInformId.TipDialog, vData);
}
// 提示文字
public void ShowHint(string _text, eHintType _type = eHintType.Info)
{
HintData vData = new HintData(_text, _type);
Inform<TipData>.Dispatch(eInformId.TipHint, vData);
}
public void ShowHint(string _text, int _type)
{
ShowHint(_text, (eHintType)_type);
}
// 提示选择框
public void ShowChoice(string _text, Action _Call, Action _NoCall = null, string _title = "提示")
{
ChoiceData vData = new ChoiceData(_text, _Call, _NoCall, _title);
Inform<TipData>.Dispatch(eInformId.TipChoice, vData);
}
// 提示等待
public void ShowWait(string _text, float _waitTimeMax = 15f)
{
WaitData vData = new WaitData(_text, _waitTimeMax);
Inform<TipData>.Dispatch(eInformId.TipWait, vData);
}
// 主线程安全 提示框
public void SafeShowDialog(string _text, string _title = "提示")
{
DialogData vData = new DialogData(_text, _title);
SafeTipQue.Enqueue(vData);
}
// 主线程安全 提示文字
public void SafeShowHint(string _text, eHintType _type = eHintType.Info)
{
HintData vData = new HintData(_text, _type);
SafeTipQue.Enqueue(vData);
}
public void SafeShowHint(string _text, int _type)
{
ShowHint(_text, (eHintType)_type);
}
// 主线程安全 提示选择框
public void SafeShowChoice(string _text, Action _Call, Action _NoCall = null, string _title = "提示")
{
ChoiceData vData = new ChoiceData(_text, _Call, _NoCall, _title);
SafeTipQue.Enqueue(vData);
}
// 主线程安全 提示等待
public void SafeShowWait(string _text, float _waitTimeMax = 15f)
{
WaitData vData = new WaitData(_text, _waitTimeMax);
SafeTipQue.Enqueue(vData);
}
public void HideChoice()
{
Inform.Dispatch(eInformId.TipChoiceClose); // 关闭选择框
}
// 关闭等待界面
public void HideWait()
{
Inform.Dispatch(eInformId.TipWaitClose);
}
}
public class TipData
{
public eTipType m_type = eTipType.None;
public string m_text = string.Empty;
public TipData(string _str)
{
m_text = _str;
}
}
public class DialogData : TipData
{
public string m_title = string.Empty;
public DialogData(string _str, string _title = "提示") : base(_str)
{
m_type = eTipType.Dialog;
m_title = _title;
}
}
public enum eHintType
{
Info = 1, // 普通 绿色
Warn, // 警告 黄色
Error, // 错误 红色
}
public class HintData : TipData
{
private eHintType m_HintType;
public eHintType p_HintType {
get { return m_HintType; }
}
public HintData(string _str, eHintType _type = eHintType.Info):base(_str)
{
m_type = eTipType.Hint;
m_HintType = _type;
}
}
public class ChoiceData : DialogData
{
public Action m_YesCall;
public Action m_NoCall;
public ChoiceData(string _str, Action _Call, Action _NoCall = null, string _title = "提示") : base(_str, _title)
{
m_type = eTipType.Choice;
m_YesCall += _Call;
if (_NoCall != null)
m_NoCall += _NoCall;
}
}
public class WaitData:TipData
{
public float m_waitTimeMax;
public WaitData(string _str, float _waitTimeMax = 15f):base(_str)
{
m_type = eTipType.Wait;
m_waitTimeMax = _waitTimeMax;
}
}