//--------------------------------------------------------
|
// [Author]: 第二世界
|
// [ Date ]: Wednesday, September 13, 2017
|
//--------------------------------------------------------
|
using UnityEngine;
|
using System.Collections;
|
using UnityEngine.UI;
|
using System.Collections.Generic;
|
using System;
|
using System.Text.RegularExpressions;
|
|
namespace vnxbqy.UI
|
{
|
|
public class ChatFriend : MonoBehaviour
|
{
|
[SerializeField] ScrollerController m_Controller;
|
|
private List<ChatFriendData> 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;
|
ChatCtrl.Inst.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()
|
{
|
ChatCtrl.OnRefreshPteChat += OnRefreshPteChat;
|
RefreshChatInfo();
|
open = true;
|
ChatCtrl.Inst.lockUpdate = true;
|
OnSetLock();
|
}
|
|
public void OnSetLock()
|
{
|
m_Controller.lockType = ChatCtrl.Inst.lockUpdate ? EnhanceLockType.LockVerticalBottom : EnhanceLockType.KeepVertical;
|
if (ChatCtrl.Inst.lockUpdate)
|
{
|
m_Controller.ResetScrollPos();
|
}
|
}
|
|
private void OnDisable()
|
{
|
ChatCtrl.OnRefreshPteChat -= OnRefreshPteChat;
|
open = false;
|
}
|
|
public void RefreshChatInfo()
|
{
|
int id = ChatCtrl.Inst.PteChatID;
|
chatList = ChatCtrl.Inst.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, ChatCtrl.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 != ChatCtrl.Inst.PteChatID && data.player != ChatCtrl.Inst.PteChatID)
|
{
|
return;
|
}
|
if (data.player == PlayerDatas.Instance.baseData.PlayerID)
|
{
|
|
}
|
RefreshChatInfo();
|
}
|
}
|
|
}
|
|
|
|