using System; 
 | 
using System.Collections; 
 | 
using System.Collections.Generic; 
 | 
  
 | 
using UnityEngine; 
 | 
     
 | 
    public class ChatBubbleManager : GameSystemManager<ChatBubbleManager> 
 | 
    { 
 | 
        public Dictionary<int, ChatBubble> chatBubbles = new Dictionary<int, ChatBubble>(); 
 | 
  
 | 
        public event Action chatBubbleStateRefresh; 
 | 
  
 | 
        bool serverInited = false; 
 | 
        public override void Init() 
 | 
        { 
 | 
            PlayerDatas.Instance.playerDataRefreshEvent += PlayerDataRefreshInfoEvent; 
 | 
        } 
 | 
  
 | 
        public override void Release() 
 | 
        { 
 | 
            PlayerDatas.Instance.playerDataRefreshEvent -= PlayerDataRefreshInfoEvent; 
 | 
        } 
 | 
  
 | 
        public void OnBeforePlayerDataInitialize() 
 | 
        { 
 | 
            bubblesIfo.Clear(); 
 | 
            serverInited = false; 
 | 
        } 
 | 
  
 | 
        public void OnPlayerLoginOk() 
 | 
        { 
 | 
            serverInited = true; 
 | 
        } 
 | 
  
 | 
        private void PlayerDataRefreshInfoEvent(PlayerDataType refreshType) 
 | 
        { 
 | 
            if (refreshType == PlayerDataType.ExAttr10 && serverInited) 
 | 
            { 
 | 
                SysNotifyMgr.Instance.ShowTip("ChangeBubbleSuccess"); 
 | 
            } 
 | 
        } 
 | 
  
 | 
        public bool TryGetBubble(int id, out ChatBubble bubble) 
 | 
        { 
 | 
            return chatBubbles.TryGetValue(id, out bubble); 
 | 
        } 
 | 
  
 | 
        public bool IsBubbleGot(int id) 
 | 
        { 
 | 
            ChatBubble bubble; 
 | 
            if (TryGetBubble(id, out bubble)) 
 | 
            { 
 | 
                // var config = ChatBubbleBoxConfig.Get(id); 
 | 
                bool got = false; 
 | 
  
 | 
                if (bubblesIfo.ContainsKey(id) && bubblesIfo[id].State == 1) 
 | 
                { 
 | 
                    got = true; 
 | 
                } 
 | 
                // if (!got && config.NeedLV != 0) 
 | 
                // { 
 | 
                //     return PlayerDatas.Instance.baseData.LV >= config.NeedLV; 
 | 
                // } 
 | 
                return got; 
 | 
            } 
 | 
            return false; 
 | 
        } 
 | 
  
 | 
        #region 服务端数据 
 | 
  
 | 
        //聊天气泡框 
 | 
        public struct BubbleBox 
 | 
        { 
 | 
            public int State;        //是否已激活 
 | 
            public int EndTime;        //到期时间戳,0为永久 
 | 
            public int Star;        //星级 
 | 
        } 
 | 
  
 | 
        public Dictionary<int, BubbleBox> bubblesIfo = new Dictionary<int, BubbleBox>(); 
 | 
  
 | 
        public void UpdateBubbleState(HA717_tagMCChatBubbleBoxState package) 
 | 
        { 
 | 
            List<int> list = null; 
 | 
            if (serverInited) 
 | 
            { 
 | 
                list = new List<int>(); 
 | 
                foreach (var id in chatBubbles.Keys) 
 | 
                { 
 | 
                    if (!IsBubbleGot(id)) 
 | 
                    { 
 | 
                        list.Add(id); 
 | 
                    } 
 | 
                } 
 | 
            } 
 | 
  
 | 
            for (int i = 0; i < package.Count; i++) 
 | 
            { 
 | 
                var info = package.BoxList[i]; 
 | 
                bubblesIfo[info.BoxID] = new BubbleBox() 
 | 
                { 
 | 
                    State = info.State, 
 | 
                    EndTime = (int)info.EndTime, 
 | 
                    Star = info.Star, 
 | 
                }; 
 | 
            } 
 | 
  
 | 
            if (serverInited) 
 | 
            { 
 | 
                if (list != null) 
 | 
                { 
 | 
                    for (int i = 0; i < list.Count; i++) 
 | 
                    { 
 | 
                        if (IsBubbleGot(list[i])) 
 | 
                        { 
 | 
                            SendUseBubble(list[i]); 
 | 
                            break; 
 | 
                        } 
 | 
                    } 
 | 
                } 
 | 
            } 
 | 
            if (chatBubbleStateRefresh != null) 
 | 
            { 
 | 
                chatBubbleStateRefresh(); 
 | 
            } 
 | 
        } 
 | 
  
 | 
        public void SendUseBubble(int id) 
 | 
        { 
 | 
            if (!IsBubbleGot(id)) 
 | 
            { 
 | 
                return; 
 | 
            } 
 | 
            if (id == PlayerDatas.Instance.baseData.bubbleId) 
 | 
            { 
 | 
                return; 
 | 
            } 
 | 
            CA230_tagCMSetChatBubbleBox pak = new CA230_tagCMSetChatBubbleBox(); 
 | 
            pak.BubbleBoxType = (byte)id; 
 | 
            GameNetSystem.Instance.SendInfo(pak); 
 | 
        } 
 | 
        #endregion 
 | 
  
 | 
        public struct ChatBubble 
 | 
        { 
 | 
            public int id; 
 | 
            public RectOffset leftPadding; 
 | 
            public RectOffset rifhtPadding; 
 | 
            public Color32 color; 
 | 
  
 | 
            public string GetBubbleIcon(bool left, ref bool isFlip) 
 | 
            { 
 | 
                return string.Empty; 
 | 
                // var config = ChatBubbleBoxConfig.Get(id); 
 | 
                // isFlip = false; 
 | 
                // if (left) 
 | 
                // { 
 | 
                //     if (string.IsNullOrEmpty(config.leftBubbleIcon)) 
 | 
                //     { 
 | 
                //         isFlip = true; 
 | 
                //         return config.rightBubbleIcon; 
 | 
                //     } 
 | 
                //     return config.leftBubbleIcon; 
 | 
                // } 
 | 
                // else 
 | 
                // { 
 | 
                //     if (string.IsNullOrEmpty(config.rightBubbleIcon)) 
 | 
                //     { 
 | 
                //         isFlip = true; 
 | 
                //         return config.leftBubbleIcon; 
 | 
                //     } 
 | 
                //     return config.rightBubbleIcon; 
 | 
                // } 
 | 
            } 
 | 
        } 
 | 
    } 
 |