using vnxbqy.UI;
|
using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
using System.Text.RegularExpressions;
|
|
using UnityEngine;
|
using UnityEngine.UI;
|
|
|
public class SysNotifyMgr : SingletonMonobehaviour<SysNotifyMgr>
|
|
{
|
/// <summary>
|
/// 服务端下发的数据
|
/// </summary>
|
private H0212_tagNotifyCode.tagNotifyStr[] sysNotifyMsg;
|
|
private ArrayList tipInfoList = new ArrayList();
|
|
private Dictionary<string, Func<string, ArrayList, bool>> notifyConditionDict = new Dictionary<string, Func<string, ArrayList, bool>>();
|
|
public event Action<string, ArrayList> sysNotifyEvent;
|
|
public event Action<string> OnSystemNotifyEvent;
|
/// <summary>
|
/// UserData去空格处理
|
/// </summary>
|
public static Regex s_UserDataSpaceRegex = new Regex(@"'([0-9]+)':[ ]+\[(.*?)\]", RegexOptions.Singleline);
|
|
private void Awake()
|
{
|
DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += BeforePlayerDataInitializeEvent;
|
StageLoad.Instance.onStageLoadFinish += OnStageLoadFinish;
|
StartCoroutine(Co_Instance());
|
}
|
|
IEnumerator Co_Instance()
|
{
|
yield return null;
|
var instance = BattleHint.Instance;
|
}
|
|
private void LateUpdate()
|
{
|
#if UNITY_EDITOR
|
if (Input.GetKeyDown(KeyCode.F3))
|
{
|
ServerTipDetails.OpenGMPanel();
|
}
|
#endif
|
}
|
|
protected override void OnDestroy()
|
{
|
base.OnDestroy();
|
DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent -= BeforePlayerDataInitializeEvent;
|
StageLoad.Instance.onStageLoadFinish -= OnStageLoadFinish;
|
}
|
|
private void OnStageLoadFinish()
|
{
|
ServerTipDetails.OnStageLoadFinish();
|
BattleHint.Instance.OnStageLoadFinish();
|
}
|
|
private void BeforePlayerDataInitializeEvent()
|
{
|
ScrollTip.m_Hints.Clear();
|
ServerTipDetails.ClearHint();
|
}
|
|
public void ReceiveNotifyCode(H0212_tagNotifyCode vNetData)
|
{
|
if (vNetData != null)
|
{
|
sysNotifyMsg = vNetData.Pars;
|
|
tipInfoList.Clear();
|
for (int i = 0; i < sysNotifyMsg.Length; i++)
|
{
|
if (sysNotifyMsg[i].Len != 0)
|
{
|
var _msg = sysNotifyMsg[i].Msg;
|
_msg = _msg.Replace(" ", string.Empty);
|
tipInfoList.Add(_msg);
|
}
|
else
|
{
|
tipInfoList.Add(sysNotifyMsg[i].MsgInt);
|
}
|
}
|
|
if (sysNotifyEvent != null)
|
{
|
sysNotifyEvent(vNetData.Msg, tipInfoList);
|
}
|
|
GetSysMsg(vNetData.Msg);
|
}
|
}
|
|
void GetSysMsg(string key)
|
{
|
///根据key从系统信息表取到消息类型
|
SysInfoConfig cfg = SysInfoConfig.Get(key);
|
if (cfg == null)
|
{
|
#if UNITY_EDITOR
|
string hint = Language.Get("L1093", key);
|
ScrollTip.ShowTip(hint);
|
ChatCtrl.Inst.RevChatInfo(hint);
|
#endif
|
}
|
else
|
{
|
if (!string.IsNullOrEmpty(cfg.richText))
|
{
|
if (notifyConditionDict.ContainsKey(cfg.key))
|
{
|
try
|
{
|
if (!notifyConditionDict[cfg.key](cfg.key, tipInfoList))
|
{
|
return;
|
}
|
}
|
catch (Exception e)
|
{
|
DebugEx.Log(e.StackTrace);
|
}
|
}
|
AnalysisSysmsg(cfg);
|
}
|
if (OnSystemNotifyEvent != null)
|
{
|
OnSystemNotifyEvent(cfg.key);
|
}
|
}
|
}
|
|
public void RegisterCondition(string key, Func<string, ArrayList, bool> condition)
|
{
|
if (!notifyConditionDict.ContainsKey(key))
|
{
|
notifyConditionDict.Add(key, condition);
|
}
|
}
|
|
public void ShowTip(string key, params object[] msg)
|
{
|
SysInfoConfig cfg = SysInfoConfig.Get(key);
|
if (cfg != null)
|
{
|
tipInfoList.Clear();
|
tipInfoList.AddRange(msg);
|
AnalysisSysmsg(cfg);
|
}
|
}
|
|
void AnalysisSysmsg(SysInfoConfig cfg)
|
{
|
SysNotifySound(cfg.sound);
|
SysNotifyFx(cfg.effect);
|
SysNotifyRichText(cfg.type, cfg.richText, cfg.order);
|
}
|
|
void SysNotifySound(string msg)
|
{
|
//DesignDebug.Log("音效信息" + msg);
|
}
|
|
void SysNotifyFx(string msg)
|
{
|
//DesignDebug.Log("特效信息" + msg);
|
}
|
|
void SysNotifyRichText(int[] type, string msg, int order = 0)
|
{
|
if (type == null || type.Length == 0)
|
{
|
return;
|
}
|
for (int i = 0; i < type.Length; i++)
|
{
|
switch ((SysNotifyType)type[i])
|
{
|
case SysNotifyType.SysFixedTip:
|
case SysNotifyType.SysFixedTip1:
|
case SysNotifyType.SysScrollTip:
|
case SysNotifyType.SysIntervalFixedTip:
|
case SysNotifyType.SysMarqueeTip:
|
case SysNotifyType.SysRealmTip:
|
if (!PreFightMission.Instance.IsFinished())
|
{
|
continue;
|
}
|
break;
|
}
|
switch ((SysNotifyType)type[i])
|
{
|
case SysNotifyType.SysFixedTip:
|
ServerTipDetails.DisplayNormalTip(msg, tipInfoList);
|
break;
|
case SysNotifyType.SysChatWin:
|
ServerTipDetails.DisplayChatTip(msg, tipInfoList);
|
break;
|
case SysNotifyType.SysFixedTip1:
|
case SysNotifyType.SysScrollTip:
|
ScrollTip.ShowTip(msg, tipInfoList, order);
|
break;
|
case SysNotifyType.SysIntervalFixedTip:
|
ServerTipDetails.ShowServerTip(msg, tipInfoList, order);
|
break;
|
case SysNotifyType.SysMarqueeTip:
|
ServerTipDetails.ShowMarquee(msg, tipInfoList,order);
|
break;
|
case SysNotifyType.SysChanelTip:
|
ChatCtrl.Inst.RevChatInfo(msg, tipInfoList);
|
break;
|
case SysNotifyType.SysFairyQuestionTip:
|
ChatCtrl.Inst.RevChatInfo(msg, tipInfoList, ChatInfoType.FairyQuestion);
|
break;
|
case SysNotifyType.SysFairyTip:
|
ChatCtrl.Inst.RevChatInfo(msg, tipInfoList, ChatInfoType.FairyTip);
|
break;
|
case SysNotifyType.SysTeamTip:
|
ChatCtrl.Inst.RevChatInfo(msg, tipInfoList, ChatInfoType.TeamTip);
|
break;
|
case SysNotifyType.SysRealmTip:
|
if (OnSysTipEvent != null)
|
{
|
OnSysTipEvent(type[i], msg, tipInfoList);
|
}
|
break;
|
case SysNotifyType.SysEvenKill:
|
BattleHint.Instance.ReceiveEvenKill(msg, tipInfoList);
|
break;
|
case SysNotifyType.SysFactionTip:
|
ChatCtrl.Inst.RevChatInfo(msg, tipInfoList, ChatInfoType.default2);
|
break;
|
|
}
|
}
|
|
}
|
|
#region 事件
|
public static event Action<int, string, ArrayList> OnSysTipEvent;
|
#endregion
|
|
public enum SysNotifyType
|
{
|
SysFixedTip = 1,//固定提示
|
SysScrollTip = 2,//滚动提示
|
SysIntervalFixedTip = 4,//全服固定消息提示
|
SysMarqueeTip = 5,//跑马灯
|
SysChatWin = 6, //聊天位置的提示
|
SysEvenKill = 7,//上古战场连杀提示
|
SysFixedTip1 = 11,//固定提示2
|
SysChanelTip = 20,//系统频道显示
|
SysFairyQuestionTip = 31,//仙盟频道问答提示
|
SysFairyTip = 32,//仙盟频道信息提示
|
SysTeamTip = 41,//队伍频道提示
|
SysFactionTip = 51, //阵营频道提示
|
SysRealmTip = 100,//境界提示
|
|
//后续IL开发添加预设
|
default1 = 200,
|
default2,
|
default3,
|
default4,
|
default5,
|
default6,
|
default7,
|
default8,
|
default9,
|
default10,
|
}
|
|
public int Compare(SystemHintData x, SystemHintData y)
|
{
|
if (x.order.CompareTo(y.order) != 0)
|
{
|
return -x.order.CompareTo(y.order);
|
}
|
return x.appendTime.CompareTo(y.appendTime);
|
}
|
}
|
|
public class SystemHintData
|
{
|
public DateTime appendTime;
|
public string message;
|
public ArrayList extentionData;
|
public int order;
|
}
|