//-------------------------------------------------------- // [Author]: 玩个游戏 // [ Date ]: Wednesday, September 13, 2017 //-------------------------------------------------------- using UnityEngine; using System.Collections; using UnityEngine.UI; using System.Collections.Generic; using System; using System.Text.RegularExpressions; public class ChatFriend : MonoBehaviour { [SerializeField] ScrollerController m_Controller; private List chatList = null; [SerializeField] RichText destText; [SerializeField] RichText destSysText; private bool open = false; public bool IsOpen { get { return open; } } private void Awake() { m_Controller.OnGetDynamicSize += OnGetChatDynamicSize; ChatManager.Instance.SetChatFreind(this); } #region 计算动态宽度长度 private bool OnGetChatDynamicSize(ScrollerDataType type, int index, out float height) { height = 90; if (chatList == null || index >= chatList.Count) { return false; } ChatData chat = chatList[index]; if (type == ScrollerDataType.Extra2) { height = chat.content.Equals(string.Empty) ? 90 : 120; } else if (type == ScrollerDataType.Tail) { height = 30; } float width = 0; OnGetChatDynamicHeight(chat.content, ref height, ref width, type, chat.infoList); return true; } private void OnGetChatDynamicHeight(string content, ref float height, ref float width, ScrollerDataType type, ArrayList infoList = null) { if (type == ScrollerDataType.Tail) { destSysText.SetExtenalData(infoList); destSysText.text = content; width = destSysText.preferredWidth; height += Mathf.Max(0, destSysText.preferredHeight - 23); } else { destText.SetExtenalData(infoList); destText.text = content; width = destText.preferredWidth; height += Mathf.Max(0, destText.preferredHeight - 30); } } #endregion private void OnEnable() { ChatManager.OnRefreshPteChat += OnRefreshPteChat; RefreshChatInfo(); open = true; ChatManager.Instance.lockUpdate = true; OnSetLock(); } public void OnSetLock() { m_Controller.lockType = ChatManager.Instance.lockUpdate ? EnhanceLockType.LockVerticalBottom : EnhanceLockType.KeepVertical; if (ChatManager.Instance.lockUpdate) { m_Controller.ResetScrollPos(); } } private void OnDisable() { ChatManager.OnRefreshPteChat -= OnRefreshPteChat; open = false; } public void RefreshChatInfo() { int id = ChatManager.Instance.PteChatID; chatList = ChatManager.Instance.GetChatInfo(id); m_Controller.Refresh(); if (chatList != null) { for (int i = 0; i < chatList.Count; i++) { if (chatList[i].soundTick != 0) { m_Controller.AddCell(ScrollerDataType.Extra2, i); continue; } if (Regex.IsMatch(chatList[i].content, ChatManager.KILL_IDENTIFY)) { m_Controller.AddCell(ScrollerDataType.Tail, i); continue; } if (chatList[i].player == PlayerDatas.Instance.baseData.PlayerID) { m_Controller.AddCell(ScrollerDataType.Header, i); } else { m_Controller.AddCell(ScrollerDataType.Normal, i); } } } m_Controller.Restart(); } private void OnRefreshPteChat(ChatFriendData data) { if (data == null) { return; } if (data.toPlayer != ChatManager.Instance.PteChatID && data.player != ChatManager.Instance.PteChatID) { return; } if (data.player == PlayerDatas.Instance.baseData.PlayerID) { } RefreshChatInfo(); } }