using System; 
 | 
using System.Collections; 
 | 
using System.Collections.Generic; 
 | 
using System.Text.RegularExpressions; 
 | 
  
 | 
using UnityEngine; 
 | 
using UnityEngine.UI; 
 | 
using Cysharp.Threading.Tasks; 
 | 
  
 | 
  
 | 
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; 
 | 
        Co_Instance().Forget(); 
 | 
    } 
 | 
  
 | 
    private async UniTask Co_Instance() 
 | 
    { 
 | 
        await UniTask.Yield(); 
 | 
        //TODO YYL 
 | 
        // 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(); 
 | 
        // TODO YYL 
 | 
        // BattleHint.Instance.OnStageLoadFinish(); 
 | 
    } 
 | 
  
 | 
    public 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); 
 | 
            ChatManager.Instance.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) 
 | 
                    { 
 | 
                        Debug.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); 
 | 
        } 
 | 
        else 
 | 
        { 
 | 
            Debug.LogError("未找到系统提示信息: " + key); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    //语言表的提示 
 | 
    public void ShowLangTip(string key, params object[] msg) 
 | 
    { 
 | 
        string hint = Language.Get(key, msg); 
 | 
        ScrollTip.ShowTip(hint); 
 | 
    } 
 | 
  
 | 
    //直接传文字的提示 
 | 
    public void ShowStringTip(string hint) 
 | 
    { 
 | 
        ScrollTip.ShowTip(hint); 
 | 
    } 
 | 
  
 | 
    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: 
 | 
                    // TODO YYL 
 | 
                    // 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: 
 | 
                    ChatManager.Instance.RevChatInfo(msg, tipInfoList); 
 | 
                    break; 
 | 
                case SysNotifyType.SysFairyQuestionTip: 
 | 
                    ChatManager.Instance.RevChatInfo(msg, tipInfoList, ChatInfoType.FairyQuestion); 
 | 
                    break; 
 | 
                case SysNotifyType.SysFairyTip: 
 | 
                    ChatManager.Instance.RevChatInfo(msg, tipInfoList, ChatInfoType.FairyTip); 
 | 
                    break; 
 | 
                case SysNotifyType.SysTeamTip: 
 | 
                    ChatManager.Instance.RevChatInfo(msg, tipInfoList, ChatInfoType.TeamTip); 
 | 
                    break; 
 | 
                case SysNotifyType.SysRealmTip: 
 | 
                    if (OnSysTipEvent != null) 
 | 
                    { 
 | 
                        OnSysTipEvent(type[i], msg, tipInfoList); 
 | 
                    } 
 | 
                    break; 
 | 
  
 | 
                //  TODO YYL     
 | 
                // case SysNotifyType.SysEvenKill: 
 | 
                //     BattleHint.Instance.ReceiveEvenKill(msg, tipInfoList); 
 | 
                //     break; 
 | 
                case SysNotifyType.SysFactionTip: 
 | 
                    ChatManager.Instance.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; 
 | 
} 
 |